对话框未出现

10

我使用以下代码:

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

    }


}

但出于某些原因,我的弹出窗口没有出现,也没有任何作用。有关造成此故障的原因,有什么想法吗?谢谢!

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

希望有所帮助。


你可能也知道我另一个问题的解决方案吗? :) http://stackoverflow.com/questions/13362396/dialog-layout-double-layered-wrong-transparant-background 我在那里卡住了... - Matthias Vanb

9

我遇到了这个问题,也许这个答案可以帮助别人。

我在非UI线程上运行代码以显示AlertDialog。使用以下代码之后:

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

AlertDialog已经生效。


这种事情发生在我身上。 - htafoya

1

你需要调用 builder.show()


0
我遇到了一個類似的問題,在我的情況下,對話框會在毫秒內出現並消失:要解決這個問題,不要在調用對話框的同一方法中調用finish()或finishActivity()。
createNewDialog(SOME_CONSTANT).show();
finish();

这会在你访问对话框之前就摧毁它。


-1
原因是因为在 AlertDialog 上没有调用 .show() 方法,所以它没有显示出来。
@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;
        }

    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接