Android Show User Dialog

In my Android app, I use a custom dialog. When I try to show a dialog, it causes an error. I do not know what I am doing wrong, and I am really confused.

Here is my code:

protected Dialog onCreateDialog(int id) {
    Dialog dialog;
    switch(id) {
    case 0:
        dialog = new Dialog(getApplicationContext());

        dialog.setContentView(R.layout.paused);
        dialog.setTitle("Game Paused");
        dialog.show();
        break;
    default:
        dialog = null;
    }
    return null;
}

And this is how I show the dialogue

showDialog(0);

By the way, it says showDialog (int) is deprecated.

Android logcat:

> 06-19 18:44:22.399: W/dalvikvm(467): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
06-19 18:44:22.419: E/AndroidRuntime(467): FATAL EXCEPTION: main
06-19 18:44:22.419: E/AndroidRuntime(467): java.lang.IllegalStateException: Could not execute method of the activity
06-19 18:44:22.419: E/AndroidRuntime(467):  at android.view.View$1.onClick(View.java:2072)
06-19 18:44:22.419: E/AndroidRuntime(467):  at android.view.View.performClick(View.java:2408)
06-19 18:44:22.419: E/AndroidRuntime(467):  at android.view.View$PerformClick.run(View.java:8816)
06-19 18:44:22.419: E/AndroidRuntime(467):  at android.os.Handler.handleCallback(Handler.java:587)
06-19 18:44:22.419: E/AndroidRuntime(467):  at android.os.Handler.dispatchMessage(Handler.java:92)
06-19 18:44:22.419: E/AndroidRuntime(467):  at android.os.Looper.loop(Looper.java:123)
06-19 18:44:22.419: E/AndroidRuntime(467):  at android.app.ActivityThread.main(ActivityThread.java:4627)
06-19 18:44:22.419: E/AndroidRuntime(467):  at java.lang.reflect.Method.invokeNative(Native Method)
06-19 18:44:22.419: E/AndroidRuntime(467):  at java.lang.reflect.Method.invoke(Method.java:521)
06-19 18:44:22.419: E/AndroidRuntime(467):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-19 18:44:22.419: E/AndroidRuntime(467):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-19 18:44:22.419: E/AndroidRuntime(467):  at dalvik.system.NativeStart.main(Native Method)
06-19 18:44:22.419: E/AndroidRuntime(467): Caused by: java.lang.reflect.InvocationTargetException
06-19 18:44:22.419: E/AndroidRuntime(467):  at com.jlennon.gametest.PlayGameActivity.pause(PlayGameActivity.java:105)
06-19 18:44:22.419: E/AndroidRuntime(467):  at java.lang.reflect.Method.invokeNative(Native Method)
06-19 18:44:22.419: E/AndroidRuntime(467):  at java.lang.reflect.Method.invoke(Method.java:521)
06-19 18:44:22.419: E/AndroidRuntime(467):  at android.view.View$1.onClick(View.java:2067)
06-19 18:44:22.419: E/AndroidRuntime(467):  ... 11 more
06-19 18:44:22.419: E/AndroidRuntime(467): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
06-19 18:44:22.419: E/AndroidRuntime(467):  at android.view.ViewRoot.setView(ViewRoot.java:509)
06-19 18:44:22.419: E/AndroidRuntime(467):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
06-19 18:44:22.419: E/AndroidRuntime(467):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
06-19 18:44:22.419: E/AndroidRuntime(467):  at android.app.Dialog.show(Dialog.java:241)
06-19 18:44:22.419: E/AndroidRuntime(467):  at com.jlennon.gametest.PlayGameActivity.onCreateDialog(PlayGameActivity.java:131)
06-19 18:44:22.419: E/AndroidRuntime(467):  at android.app.Activity.onCreateDialog(Activity.java:2472)
06-19 18:44:22.419: E/AndroidRuntime(467):  at android.app.Activity.createDialog(Activity.java:881)
06-19 18:44:22.419: E/AndroidRuntime(467):  at android.app.Activity.showDialog(Activity.java:2547)
06-19 18:44:22.419: E/AndroidRuntime(467):  at android.app.Activity.showDialog(Activity.java:2514)
06-19 18:44:22.419: E/AndroidRuntime(467):  ... 15 more

Thanks a lot!

+1
source share
6 answers

Try this code

 protected Dialog onCreateDialog(int id) {
  Dialog dialog;
  switch(id) {
   case 0:
    dialog = new Dialog(this);

    dialog.setContentView(R.layout.paused);
    dialog.setTitle("Game Paused");
    dialog.show();
    break;
default:
    dialog = null;
}
return null;

}

I just replaced dialog = new Dialog (getApplicationContext ()) with dialog = new Dialog (this);

+2
source
Dialog dialog = new Dialog(YourActivity.this);
dialog.show();

Instead of the code above.

I will use this.

AlertDialog.Builder dialog = AlertDialog.Builder(this);

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

View v = inflater.inflate(R.layout.yourlayout,null,false);

dialog.setView(v);

dialog.show();

By the way, onCreateDialog(int)out of date

+2
source

CustomDialog. ..

enter image description here

xml:..

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:id="@+id/createpost_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TextView
            android: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" />

        <EditText
            android: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" />

        <EditText
            android: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" />

        <Button
            android: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" />

        <TextView
            android: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>

    <LinearLayout
        android: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" >

        <Button
            android: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" />

        <Button
            android: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>

CustomDialogClass

    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;

public class CustomDialogClass extends Dialog implements
android.view.View.OnClickListener {

    public Activity c;
    public Dialog d;
    public Button Post, Cancel,Upload;

    public CustomDialogClass(Activity a)
    {
        super(a);

        this.c = a;
    }

    @Override
    protected void onCreate(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);

    }

    @Override
    public void onClick(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();
    }
}

    CustomDialogClass cdd = new CustomDialogClass(getActivity());//while calling from fragment

CustomDialogClass cdd = new CustomDialogClass(YourActivity.this);//while calling from Activity

            cdd.show();
+2

, . createDialog , , . , , . , .

-, AVD , , API Honeycomb (11) .

, Application Context (getApplicationContext()) , Activity. this Activity, .

+1

:

import android.app.AlertDialog;

new AlertDialog.Builder(YourActivityName.this)
    .setTitle("Game Paused")
    .setPositiveButton("OK", null)
    .show();
0

:

Dialog .      , , .      :

AlertDialog

ProgressDialog

DatePickerDialog

TimePickerDialog

: http://developer.android.com/guide/topics/ui/dialogs.html

Google does not seem to provide an explanation for this in this document or the actual API link for the Dialog class. And, as you already know, the error message is also not. Therefore, I am not sure why the class is not "protected."

In any case, using one of these classes should solve your problem.

Comment if anyone knows why we cannot use the Dialog class directly.

0
source

All Articles