更新: クラッシュ時にログに記録されたエラーを取得しなかったため、Eclipse に何か問題があったに違いありません。説明されているようにアプリがクラッシュしても、このエラーは発生しません。
The specified child already has a parent. You must call removeView() on the child's
parent first.
これは、noteview.show() メソッドを 2 回目に実行したときに発生します。
元の投稿
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
、2 つの選択肢を提示するポップアップ メニューを開きます。
で始まる 2 つ目は、rmvdialog()
うまく機能します。問題ありません。
メモ ダイアログを開く最初のものには問題があります。最初のアクセスでは、メモ ダイアログが開き、メッセージとOK
およびCancel
ボタンが表示されます。OK
ただし、クリックするかメモ ダイアログでリスト (メイン ビュー) に戻った後Cancel
(どちらもまだ何もしていないため)、2 回目の長いクリックでメモ ダイアログを選択すると、アプリケーションがクラッシュします。
クラッシュはエラーログなしです。try-catch
周りも何も明らかにnoteview.show()
しません。
私は自分のコードを見て盲目になるので、おそらく設計に腐敗したものがありますが、何がわかりません。
ここでの全体的な機能は、いくつかの項目を含むリストです。アイテムの 1 つを長押しすると、2 つのエントリを含むポップアップ メニューが表示されます。次に、「メモ」と呼ばれるものを長押しすると、リスト内のアイテムのテキストを表示/編集するためのダイアログが表示されます。