AlertDialog没有显示但是模态

时间:2017-02-24 10:48:23

标签: android alertdialog

Activity有一个名为方法的事件,在按 Enter 或点击屏幕按钮时调用该方法。在这种情况下,如果符合某些条件,我会构建AlertDialog

public void process() {
    ....
    final AlertDialog.Builder adb = new AlertDialog.Builder(this);
    adb.setTitle(getString(R.string.alert_title));
    adb.setMessage(getString(R.string.alert_question));
    adb.setCancelable(false);
    adb.setPositiveButton(getString(R.string.alert_answer_ok), new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            ....
        }
    });
    adb.setNegativeButton(getString(R.string.alert_answer_no), new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            ....
        }
    });
    adb.show();
    ....
}

但是,在模拟器中运行时,当事件触发时,AlertDialog不会显示:
它会阻挡Activity,就像上面有一个模态对话框,但对话框本身不可见。

导致这种情况的原因是什么?如何正确显示对话框?

修改

也试过这个,但仍然行不通:

adb.create().show();

2 个答案:

答案 0 :(得分:0)

class YourComponent extends Component {
  constructor(props) {
      super(props);

      this.onUnload = this.onUnload.bind(this); // if you need to bind callback to this
  }

  onUnload(event) { // the method that will be used for both add and remove event
    const gohome = confirm('go home?')
    if (gohome === true) {
      console.log('yay')
      window.location = 'http://yourhomepage.com'
    }else {
      console.log('yes')
    }
  }

  componentDidMount() {
     window.addEventListener("beforeunload", this.onUnload)
  }

  componentWillUnmount() {
      window.removeEventListener("beforeunload", this.onUnload)
  }

  render() {
    return (
      <div>
          Try with window location
      </div>
    )
  }
}

从create()

获取AlertDialog
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

builder.setMessage(R.string.dialog_message)
       .setTitle(R.string.dialog_title);

检查Google文档$$PRUNE

答案 1 :(得分:0)

与此同时,我明白了。

问题不在于对话框的构建,而是我的方法并没有以对话框的显示结束 但是,由于在UI线程中调用了该方法,因此在此方法结束之前,对话框才会被绘制...

所以我只是将对话框之后的代码放入一个单独的方法中,并在显示对话框的条件的else情况下调用它,并在对话框按钮的监听器中调用...

无论如何,谢谢你的帮助。