我的主要问题是:无论如何我可以从onOptionsItemSelected()内部触发一个AlertDialog而不会在按下对话框上的按钮时使我的模拟器崩溃吗?
我已经浏览了整个互联网,但我找到的每个人都在说同样的事情,但即使我复制并粘贴他们的代码,我也会得到同样的错误。所以我会尝试解释我的情况。
以下是一个非常简单的AlertDialog示例:
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this)
.setTitle("Your Title")
.setMessage("Click yes to exit!")
.setCancelable(false)
.setNeutralButton("Ok",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
现在这个工作。只要我在onOptionsItemSelected()函数的OUTSIDE上运行它。例如,如果我在onClickListener中为常规Button添加这段代码。然后单击按钮时会出现警告对话框,一切都会正常工作。但是,当我在onOptionsItemSelected()中包含这段代码时。然后会出现警告对话框,但是按下对话框上的按钮会使整个模拟器崩溃。这是我的onOptionsItemSelected():
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.action_trash:
Log.i("trash", "button clicked");
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this)
.setTitle("Your Title")
.setMessage("Click yes to exit!")
.setCancelable(false)
.setNeutralButton("Ok",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
return true;
case R.id.action_help:
Log.i("help", "button clicked");
return true;
default:
return super.onOptionsItemSelected(item);
}
}
现在,当我点击工具栏中与action_trash id关联的项目时。我得到一个警告对话框,但是当我点击OK按钮时,我的整个android模拟器就崩溃了。我仍然可以看到的唯一警告是:
Hax is enabled
Hax ram_size 0x40000000
HAX is working and emulator runs in fast virt mode.
emulator: Listening for console connections on port: 5554
emulator: Serial number of this emulator (for ADB): emulator-5554
EmuGL:WARNING: bad generic pointer 0x7fc16d378600
我非常确定这是一条无关的信息。我有时会看到人们要求LogCats,但是因为整个模拟器崩溃了所以我找不到任何东西。
作为一个附带问题:为什么这甚至根本不起作用?是因为setNeutralButton()内部的onClickListener()以某种方式被破坏了吗?我对android很新,所以如果这是一个很大的错误,将来可以避免任何建议,我们将不胜感激。
P.S。我也试过更换' .Builder(this)'与' .Builder(MainActivity.this)'到目前为止我遇到的所有变化都没有解决问题。
提前致谢:)
答案 0 :(得分:4)
我遇到了同样的事情。两件不同的事情对我有用。
其中任何一个都应该解决问题,你不需要同时做这两件事。