更新: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()
也没有透露任何内容。
我会盲目地看着自己的代码,所以设计中可能会出现一些问题,但我看不清楚。
此处的整体功能是包含多个项目的列表。当长按其中一个项目时,会显示一个包含两个条目的弹出菜单。然后,当长按一个名为“注释”的对话框时,会显示一个对话框,用于显示/编辑列表中项目的文本。
答案 0 :(得分:1)
因为你也发现了我的所作所为。这是我向你请求的测试活动。你可以看到它是你的精简版(除了我使用onclick而不是onlongclick)
public class MainActivity extends Activity {
private Builder firstDialogBuilder;
private AlertDialog firstDialog;
private Builder secondDialogBuilder;
private AlertDialog secondDialog;
private ListView secondListView;
private ListView firstListView;
@Override
public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
firstDialogBuilder = new AlertDialog.Builder(this);
firstListView = new ListView(this);
firstListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new String[] {"First Item1", "First Item2"}));
firstDialogBuilder.setView(firstListView);
firstListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
secondListView = new ListView(MainActivity.this);
secondListView.setAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, new String[] {"Second Item1", "Second Item2"}));
secondDialogBuilder.setView(secondListView);
secondDialog = secondDialogBuilder.create();
secondDialog.show();
}
});
secondDialogBuilder = new AlertDialog.Builder(this);
secondListView = new ListView(this);
secondListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new String[] {"Second Item1", "Second Item2"}));
secondDialogBuilder.setView(secondListView);
secondDialogBuilder.setPositiveButton("ok", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "ok on second", Toast.LENGTH_SHORT).show();
secondDialog.dismiss();
}
});
secondDialogBuilder.setNegativeButton("cancel", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "cancel on second", Toast.LENGTH_SHORT).show();
secondDialog.dismiss();
}
});
firstDialog = firstDialogBuilder.create();
firstDialog.show();
}
}
下次请提供类似的信息来帮助我们:)