Android-show Custom Dialog
Solution 1:
Try this code
protected Dialog onCreateDialog(int id) {
Dialog dialog;
switch(id) {
case0:
dialog = new Dialog(this);
dialog.setContentView(R.layout.paused);
dialog.setTitle("Game Paused");
dialog.show();
break;
default:
dialog = null;
}
returnnull;
}
I just replaced dialog = new Dialog(getApplicationContext()) to dialog = new Dialog(this);
Solution 2:
i have created a CustomDialog. like this..
the xml is ..
<?xml version="1.0" encoding="utf-8"?><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><LinearLayoutandroid:id="@+id/createpost_layout"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical" ><TextViewandroid:id="@+id/cre"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"android:gravity="center_horizontal"android:text="CREATE POST"android:textColor="@color/mytextcolor"android:textSize="20sp" /><EditTextandroid:id="@+id/topic_ev"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"android:background="@drawable/txt_field"android:hint="topic" /><EditTextandroid:id="@+id/description_ev"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"android:background="@drawable/destxt_field"android:hint="description"android:inputType="textMultiLine" /><Buttonandroid:id="@+id/upload_btn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="left"android:layout_margin="10dp"android:background="@drawable/upload_btn" /><TextViewandroid:id="@+id/textu"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="10dp"android:text="UPLOAD A FILE JPEG,GIF OR PNG 3MB Max"android:textSize="10sp" /></LinearLayout><LinearLayoutandroid:id="@+id/layout_forbuttons"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/createpost_layout"android:layout_margin="10dp"android:orientation="horizontal" ><Buttonandroid:id="@+id/post_btn"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_margin="10dp"android:layout_weight="1"android:background="@drawable/post_btn" /><Buttonandroid:id="@+id/cancel_btn"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_margin="10dp"android:layout_weight="1"android:background="@drawable/cancel_btn" /></LinearLayout></RelativeLayout>
and CustomDialogClass is
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.Toast;
import com.example.fragmentaltdd.R;
publicclassCustomDialogClassextendsDialogimplementsandroid.view.View.OnClickListener {
public Activity c;
public Dialog d;
public Button Post, Cancel,Upload;
publicCustomDialogClass(Activity a)
{
super(a);
this.c = a;
}
@OverrideprotectedvoidonCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.createpost);
Post = (Button) findViewById(R.id.post_btn);
Cancel = (Button) findViewById(R.id.cancel_btn);
Upload = (Button)findViewById(R.id.upload_btn);
Post.setOnClickListener(this);
Cancel.setOnClickListener(this);
Upload.setOnClickListener(this);
}
@OverridepublicvoidonClick(View v)
{
switch (v.getId())
{
case R.id.post_btn:
//c.finish();
Toast.makeText(c, "Post button clikced", Toast.LENGTH_LONG).show();
break;
case R.id.upload_btn:
// c.finish();
Toast.makeText(c, "Upload button clikced", Toast.LENGTH_LONG).show();
break;
case R.id.cancel_btn:
dismiss();
break;
default:
break;
}
dismiss();
}
}
And call it like this
CustomDialogClasscdd=newCustomDialogClass(getActivity());//while calling from fragmentCustomDialogClasscdd=newCustomDialogClass(YourActivity.this);//while calling from Activity
cdd.show();
Solution 3:
First of all, you're using that method wrong. The point of the createDialog
method is to, well, create the dialog and then return it. You're showing the dialog within the method, then not returning it at all, which defeats the purpose of overriding that method at all. You really should just have your own method that creates and displays your dialog.
Second of all, as AVD posted in the comments to your question, that method of displaying dialogs is deprecated for apps targeting an API for Honeycomb (11) or later.
Your problem, however, is that you're using the Application Context
(getApplicationContext()
) object to display a dialog that should belong to your Activity
. You should pass in this
instead to use the Activity
context and that will fix your error.
Solution 4:
Try it like this:
import android.app.AlertDialog;
newAlertDialog.Builder(YourActivityName.this)
.setTitle("Game Paused")
.setPositiveButton("OK", null)
.show();
Solution 5:
Documentation says:
The Dialog class is the base class for creating dialogs. However, you typically should not instantiate a Dialog directly. Instead, you should use one of the following subclasses:
AlertDialog
ProgressDialog
DatePickerDialog
TimePickerDialog
source: http://developer.android.com/guide/topics/ui/dialogs.html
Google doesn't seems to give a reason for this on this document, or the actual API reference for the Dialog class. And as you already know, the error message doesn't either. So I'm not sure why the class is not 'protected'.
Anyway, using one of the above classes should solve your issue.
Please comment if anyone knows why we can't use the Dialog class directly.
Post a Comment for "Android-show Custom Dialog"