Android-Show Custom Dialog

后端 未结 6 1714
忘了有多久
忘了有多久 2021-01-24 20:15

In my android application, I am using a custom dialog. When I try to show the dialog, it causes an error. I don\'t know what I am doing wrong, and I am really confused.

<
相关标签:
6条回答
  • 2021-01-24 20:25

    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()) to dialog = new Dialog(this);

    0 讨论(0)
  • 2021-01-24 20:31
    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) is deprecated;

    0 讨论(0)
  • 2021-01-24 20:32

    i have created a CustomDialog. like this..

    enter image description here

    the xml is ..

        <?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>
    

    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;
    
    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();
        }
    }
    

    And call it like this

        CustomDialogClass cdd = new CustomDialogClass(getActivity());//while calling from fragment
    
    CustomDialogClass cdd = new CustomDialogClass(YourActivity.this);//while calling from Activity
    
                cdd.show();
    
    0 讨论(0)
  • 2021-01-24 20:34

    Try it like this:

    import android.app.AlertDialog;
    
    new AlertDialog.Builder(YourActivityName.this)
        .setTitle("Game Paused")
        .setPositiveButton("OK", null)
        .show();
    
    0 讨论(0)
  • 2021-01-24 20:35

    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.

    0 讨论(0)
  • 2021-01-24 20:39

    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.

    0 讨论(0)
提交回复
热议问题