9

我使用以下代码:

public class Settings extends Activity implements OnClickListener {

    private Activity activity;
    private AlertDialog.Builder builder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.settings);

        Button bAdd = (Button) findViewById(R.id.bAdd);
        bAdd.setOnClickListener(this);

        activity = this;
        builder = new AlertDialog.Builder(activity);
        builder.setMessage("message")
           .setTitle("title");

    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.bAdd:
            AlertDialog dialog = builder.create();
            break;
        }

    }


}

但是由于某种原因,我的弹出窗口没有出现,也什么都不做。关于导致此故障的原因有什么想法吗?谢谢!

4

5 回答 5

10

您必须调用show()方法而不是create().

注意: create()方法只创建实例,Dialog但不会显示它。

一个建议:

您可以创建返回Dialog如下的方法:

public Dialog createNewDialog(int type) {
   AlertDialog dlg = null;
   switch (type) {
      case SOME_CONSTANT:
         dlg = new AlertDialog.Builder(ActivityName.this / this)
            .setTitle("Title")
            .setMessage("Message")
            .setPositiveButton("Yes", null)
            .create();
      break;
   }
}

然后您可以将其称为:

createNewDialog(SOME_CONSTANT).show();

并且您的Dialog将被显示。

特别是在您的情况下,您可以使用以下代码片段实现您的目标:

@Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.bAdd:
            createNewDialog(SOME_CONSTANT).show();
            break;
        }
    }

希望能帮助到你。

于 2012-11-13T12:14:55.477 回答
9

我有这个问题,也许这个答案可以帮助某人。

我正在运行代码以在非 ui 线程上显示 AlertDialog。使用后:

runOnUiThread(new Runnable()
    {
        @Override
        public void run()
        {
            ShowAlert();
        }
    });

AlertDialog 工作。

于 2018-09-13T16:30:04.050 回答
0

你需要打电话 builder.show()

于 2012-11-13T12:16:39.833 回答
0

我有一个类似的问题,在我的情况下,对话框会在几毫秒内出现和消失:要解决它,不要在调用对话框的同一方法中调用 finish() 或 finishActivity()。

createNewDialog(SOME_CONSTANT).show();
finish();

即使在您访问它之前,这也会破坏您的对话框。

于 2016-09-24T19:58:26.437 回答
-1

它没有显示的原因是没有.show()被调用AlertDialog

@Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.bAdd:
            AlertDialog dialog = builder.create();
            dialog.show();
            break;
        }

    }
于 2012-11-13T12:30:55.647 回答