【问题标题】:Dialog does not appear对话框不出现
【发布时间】:2012-11-13 12:13:18
【问题描述】:

我使用以下代码:

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

    }


}

但由于某种原因,我的弹出窗口没有出现,也没有执行任何操作。关于导致此故障的任何想法?谢谢!

【问题讨论】:

    标签: android dialog


    【解决方案1】:

    您必须调用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 将显示出来。

    尤其是在您的情况下,您可以使用以下 sn-p 代码实现目标:

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

    希望对你有帮助。

    【讨论】:

    【解决方案2】:

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

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

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

    AlertDialog 起作用了。

    【讨论】:

    • 这发生在我身上
    【解决方案3】:

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

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

    这甚至会在您访问之前破坏您的对话框。

    【讨论】:

      【解决方案4】:

      您需要致电builder.show()

      【讨论】:

        【解决方案5】:

        它没有显示的原因是.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;
                }
        
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-31
          • 2011-08-21
          • 1970-01-01
          相关资源
          最近更新 更多