我正在使用以下代码进行上下文菜单,然后如果用户选择了删除,则会出现对话按摩。
infos.setOnCreateContextMenuListener(new OnCreateContextMenuListener(){
//@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
menu.setHeaderTitle("Context Menu");
menu.add(0, CONTEXT_EDIT, 0, "Edit Item");
menu.add(0, CONTEXT_DELETE, 1, "Delete Item");
}
});
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
final Long _id = menuInfo.id;
//selected_row = menuInfo.position;
// To get the id of the clicked item in the list use menuInfo.id
switch (item.getItemId()) {
case CONTEXT_EDIT:
addEditRes(_id);
break;
case CONTEXT_DELETE:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure you want to delete?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
infoDataHelper.deleteRes(_id);
model = infoDataHelper.getCursor(addType);
adapter.changeCursor(model);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
break;
default:
return super.onContextItemSelected(item);
}
adapter.notifyDataSetChanged();
return true;
}
但是,一旦我选择删除,就会出现以下错误。
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
我的代码中有什么问题?
答案 0 :(得分:29)
我认为问题可能就在这条线上:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
尝试将其修改为:
AlertDialog.Builder builder = new AlertDialog.Builder(MyActivityName.this);
使用您的活动名称替换MyActivityName。
这样可以解决错误吗?
答案 1 :(得分:6)
应该是 AlertDialog.Builder builder = new AlertDialog.Builder(this.getParent());
因为活动是另一个tabactivity中的tabactivity。
答案 2 :(得分:6)
我得到了同样的错误。 我改变了
AlertDialog.Builder builder = new AlertDialog.Builder(this);
到
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
现在工作正常。感谢。
答案 3 :(得分:0)
科特琳
从此更改:
val builder: AlertDialog.Builder = AlertDialog.Builder(this)
到
val builder: AlertDialog.Builder = AlertDialog.Builder(this@MainActivity)