Android 单击按钮时显示警报对话框

Android 单击按钮时显示警报对话框,android,radio-button,dialog,Android,Radio Button,Dialog,我试图查看带有单选按钮的对话框,但当我单击按钮时,警报对话框从未出现。下面是代码。请让我知道是否有任何替代解决方案。此示例取自API演示 public class MainPage extends Activity{ Button start; private static final int DIALOG_SINGLE_CHOICE = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.on

我试图查看带有单选按钮的对话框,但当我单击按钮时,警报对话框从未出现。下面是代码。请让我知道是否有任何替代解决方案。此示例取自API演示

public class MainPage extends Activity{
Button start;
private static final int DIALOG_SINGLE_CHOICE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.mainpage);
    start = (Button) findViewById(R.id.start);
    start.setBackgroundResource(R.drawable.read);
    start.setOnClickListener(new View.OnClickListener() {
        @SuppressWarnings("deprecation")
        public void onClick(View v) {

            showDialog(DIALOG_SINGLE_CHOICE );

        }
    });

}

@Override
@Deprecated
protected Dialog onCreateDialog(int id) {
    id = DIALOG_SINGLE_CHOICE;
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Choose your option");
    builder.setSingleChoiceItems(R.array.Baani, 0, new OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub

        }
    })
    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

                    /* User clicked Yes so do some stuff */
                }
            })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

                    /* User clicked No so do some stuff */
                }
            })
           .create();
    return super.onCreateDialog(id);
        }   
  }
}

您需要替换
返回super.onCreateDialog(id)返回builder.show()
.create()
将从生成器中创建一个警报对话框,但不会显示该对话框
.show()
将从生成器创建对话框并在屏幕上显示

我还认为,
intid
可能是不必要的。您可以尝试以下代码,它应该适合您:

public class MainPage extends Activity{
Button start;
@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.mainpage);
start = (Button) findViewById(R.id.start);
start.setBackgroundResource(R.drawable.read);
start.setOnClickListener(new View.OnClickListener() {
    @SuppressWarnings("deprecation")
    public void onClick(View v) {

        showDialog(DIALOG_SINGLE_CHOICE );

    }
});

}

@Override
public Dialog onCreateDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Choose your option");
    builder.setSingleChoiceItems(R.array.Baani, 0, new OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub

        }
    })
    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

                    /* User clicked Yes so do some stuff */
                }
            })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

                    /* User clicked No so do some stuff */
                }
            });
        return builder.show();
        }   
  }
}

您需要替换
返回super.onCreateDialog(id)返回builder.show()
.create()
将从生成器中创建一个警报对话框,但不会显示该对话框
.show()
将从生成器创建对话框并在屏幕上显示

我还认为,
intid
可能是不必要的。您可以尝试以下代码,它应该适合您:

public class MainPage extends Activity{
Button start;
@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.mainpage);
start = (Button) findViewById(R.id.start);
start.setBackgroundResource(R.drawable.read);
start.setOnClickListener(new View.OnClickListener() {
    @SuppressWarnings("deprecation")
    public void onClick(View v) {

        showDialog(DIALOG_SINGLE_CHOICE );

    }
});

}

@Override
public Dialog onCreateDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Choose your option");
    builder.setSingleChoiceItems(R.array.Baani, 0, new OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub

        }
    })
    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

                    /* User clicked Yes so do some stuff */
                }
            })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

                    /* User clicked No so do some stuff */
                }
            });
        return builder.show();
        }   
  }
}

您在
onCreateDialog()中做得不对

首先,您不应该做
id=DIALOG\u SINGLE\u COICE
,而是测试
id
值,如果它等于
DIALOG\u SINGLE\u CHOICE
。 *如果是,则使用
AlertDialog.Builder
创建
对话框
,并返回
Builder.create()
。 *如果否,则返回
super.onCreateDialog(id)


但是此方法已被弃用,您应该改用。

您在
onCreateDialog()中做得不对。

首先,您不应该做
id=DIALOG\u SINGLE\u COICE
,而是测试
id
值,如果它等于
DIALOG\u SINGLE\u CHOICE
。 *如果是,则使用
AlertDialog.Builder
创建
对话框
,并返回
Builder.create()
。 *如果否,则返回
super.onCreateDialog(id)


但此方法已被弃用,您应该改用。

创建此函数并在单击事件中使用showAskDialog()函数

private void showAskDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("DialogTitle").setMessage("DialogMessage").setCancelable(true).setSingleChoiceItems(R.array.Baani, 0, new OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                  // TODO Auto-generated method stub

                }
                }).setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {

                    dialog.cancel();
                }
            }).setPositiveButton("YES", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {

                    dialog.cancel();
                }
            });
    // before @TronicZomB advice
    //AlertDialog alert = builder.create();
    //alert.show();
    // after @TronicZomB advice
    builder.show();
}

创建此函数并在单击事件中使用showAskDialog()函数

private void showAskDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("DialogTitle").setMessage("DialogMessage").setCancelable(true).setSingleChoiceItems(R.array.Baani, 0, new OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                  // TODO Auto-generated method stub

                }
                }).setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {

                    dialog.cancel();
                }
            }).setPositiveButton("YES", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {

                    dialog.cancel();
                }
            });
    // before @TronicZomB advice
    //AlertDialog alert = builder.create();
    //alert.show();
    // after @TronicZomB advice
    builder.show();
}
.create()
是不必要的。在生成器上调用
.show()
将创建它并在一行代码中显示它。使用
.create()
的唯一原因是,您可以在其他地方多次调用
.show()
,但在这种情况下不需要它。
.create()
是不必要的。在生成器上调用
.show()
将创建它并在一行代码中显示它。使用
.create()
的唯一原因是,您可以在其他位置多次调用
.show()
,但在这种情况下,不需要它。
.create()
不会显示对话框。您需要在“*如果是…”中返回
builder.show()
。create()
将不显示对话框。您需要在“*如果是…”中返回
builder.show()