单击按钮时显示AlertDialog问题

时间:2011-03-12 12:08:26

标签: android

我的Activity中有按钮,我想在点击按钮时显示AlertDialog:

  @Override
public void onClick(View view) {
     case R.id.btnDetailedCall:
        final String[] phoneArray=ad.getPhone().split(" ");

        if(phoneArray.length>1){

            AlertDialog.Builder builder=new AlertDialog.Builder(this);
            builder.setTitle("Title");
            builder.setSingleChoiceItems(phoneArray, -1, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    selectedPhone=phoneArray[which];
                }
            });
            AlertDialog dialog=builder.create();
            dialog.show();
  }

当我将“this”传递给AlertDialog时,构造函数代码正常运行但屏幕上没有出现对话框。我相信“this”在这里不是正确的引用,所以我尝试了getBaseContext()并得到了WindowManager$BadTockenException: Unable to add window -- tocken null is not for an application

感谢任何帮助,谢谢。

5 个答案:

答案 0 :(得分:0)

试试这个:

AlertDialog.Builder builder=new AlertDialog.Builder(className.this);

其中className是Activity类的名称,即主外部类。

答案 1 :(得分:0)

传递“this”可能会引用错误的对象,尝试传递“ClassName.this”,其中ClassName是您正在使用的实际类的名称 - 这是我在请求用户文本时使用的示例代码块在可能有帮助的应用程序中输入:

AlertDialog.Builder alert = new AlertDialog.Builder(MyClassName.this);
alert.setTitle("My title");
alert.setMessage("Some info I want to tell the user about");
final EditText input = new EditText(MyClassName.this);
input.setInputType(InputType.TYPE_CLASS_NUMBER);
alert.setView(input);
alert.setPositiveButton("Do it", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
        try{
            int value = Integer.parseInt(input.getText().toString());
            doIt(value);
        }catch (Exception e){
            finish();
        }
    }
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
        // Canceled.
        finish();
    }
});
alert.show();

答案 2 :(得分:0)

你可以尝试

AlertDialog.Builder builder = new AlertDialog.Builder( getApplicationContext() );

答案 3 :(得分:0)

尝试使用builder.show()而不是最后两行。

答案 4 :(得分:0)

尝试在AlertDialog.Builder语句前添加“new”关键字,并通过在后续行中执行“.setTitle ...”等将其他关键字链接到初始语句。我有一些像这样的工作。

实施例

new AlertDialog.Builder(this)
    .setTitle("Test")
    .create()
    .show();