更新:Eclipse 一定有问题,因为我在崩溃时没有记录任何错误。当应用程序崩溃时,我没有收到此错误,如下所述:
The specified child already has a parent. You must call removeView() on the child's
parent first.
这在第二次运行 noteview.show() 方法时发生。
原帖
我有一个问题AlertDialog
,它是从另一个的侦听器内部开始的AlertDialog
。
这是创建对话框和侦听器以及对话框的代码show()
:
AlertDialog.Builder mdialog;
ArrayAdapter<String> popmenu;
EditText input;
mdialog = new AlertDialog.Builder(ShoppingListApp03Activity.this);
popmenu = new ArrayAdapter<String>(ShoppingListApp03Activity.this,
android.R.layout.select_dialog_item);
popmenu.add("Notes");
popmenu.add("Remove");
noteview = new AlertDialog.Builder(ShoppingListApp03Activity.this)
noteview.setTitle("Notes");
input = new EditText(this);
noteview.setView(input);
lv.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position,
long id) {
final String sitem = items.get(position).getId();
mdialog.setAdapter(popmenu, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
if (item == 0) {
updateFooter("Not implemented. (" + sitem + ")");
noteview.show();
} else {
deleteitem = Integer.parseInt(sitem);
rmvdialog.show();
}
}
});
mdialog.show();
return false;
}
});
/* Click listener for the "Notes" popup menu: */
noteview.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
Editable value = input.getText();
// Do something with value!
}
});
noteview.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Canceled.
}
});
打开一个弹出菜单,onItemLongClickListener
其中有两个选项。
第二个,它开始rmvdialog()
,很好地完成了它的工作。那里没有问题。
第一个打开注释对话框有一个问题:在第一次访问时,它打开注释对话框并显示消息和OK
和Cancel
按钮。但是,在返回列表(主视图)后,通过单击OK
或Cancel
在注释对话框中(因为两者都没有),第二次长按和选择注释对话框会使应用程序崩溃。
崩溃没有错误记录。try-catch
周围noteview.show()
也没有透露任何东西。
我在看自己的代码时会变得盲目,所以设计中可能有一些烂掉的东西,但我看不出是什么。
这里的整体功能是一个包含多个项目的列表。长按其中一项时,会显示一个包含两个条目的弹出菜单。然后,当长按称为“注释”的那个时,会出现一个对话框,用于显示/编辑列表中的项目的文本。