ハードウェアの [戻る] ボタン (またはダイアログの [OK] ボタン) を押しても、最初の DialogFragment に戻らないことがある理由がわかりません。
MainActivity のオプション メニューから呼び出される DeductionListDialog フラグメントがあります。
public boolean onOptionsItemSelected(MenuItem item) {
...
case R.id.action_deduction_list:
DialogFragment newFragment = new DeductionListDialog();
newFragment.show(getFragmentManager(), "dialog");
return true;
default:
return super.onOptionsItemSelected(item);
}
次に、DeductionListDialog は、その onCreateDialog メソッド内に 2 つの onClickListeners を持ちます。
// the listview that holds the deduction list
ListView listview = (ListView) view.findViewById(android.R.id.list);
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
// set a short click listener
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// create a new dialog fragment
DialogFragment deduction_specifics = new DeductionSpecificsDialog();
// / bundle database row so we can get the correct info
// for our specific listing
Bundle arguments = new Bundle();
arguments.putLong("database_row", id);
deduction_specifics.setArguments(arguments);
deduction_specifics.show(getFragmentManager(), "dialog");
}
});
// set the long click listener
listview.setOnItemLongClickListener(new OnItemLongClickListener() {
// on long click we want to open the edit fragment
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
DialogFragment deduction_edit = new DeductionEditFragment();
Bundle arguments = new Bundle();
arguments.putLong("database_id", id);
deduction_edit.setArguments(arguments);
deduction_edit.show(getFragmentManager(), "dialog");
/*Intent deduction_edit_intent = new Intent(getActivity(), DeductionEditActivity.class);
deduction_edit_intent.putExtra("database_id", id);
startActivity(deduction_edit_intent);*/
return true;
}
});
リストビューの onItemClick および onItemLongClick リスナーをクリックすると、別のダイアログがポップアップしてさまざまな情報が表示されます。戻るボタンまたはダイアログの [OK] ボタンを押すと、予想どおり最初の DeductionListDialog フラグメントに戻ります。
DeductionListDialog には、その onCreateDialog メソッド内にも次のものがあります。
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
...
alertDialogBuilder.setView(view);
alertDialogBuilder.setTitle("Deductions: ");
alertDialogBuilder.setMessage("Long press to update or delete");
alertDialogBuilder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User clicked OK button
dialog.dismiss();
}
});
alertDialogBuilder.setNegativeButton("Add", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User clicked Add button
DialogFragment deduction_edit = new DeductionEditFragment();
Bundle arguments = new Bundle();
deduction_edit.setArguments(arguments);
deduction_edit.show(getFragmentManager(), "dialog");
/*Intent deduction = new Intent(getActivity(), DeductionEditActivity.class);
startActivity(deduction);*/
}
});
「追加」ボタンをクリックすると、新しい DeductionEditFragment が作成されます。戻るをクリックすると (またはダイアログのキャンセル ボタンと同意ボタン)、ビューが元の DeductionListDialog フラグメントに戻ることを期待しますが、クリックするとフラグメントが閉じて MainActivity に戻ります。
1)将来これを防ぐ方法を学びたいので、なぜこれが当てはまるのですか。
2) この問題を解決する最も簡単な方法は何ですか?
3) #2 と異なる場合、この問題を解決する「適切な」方法は何ですか?
3 つのクラス全体 (DeductionListDialog、DeductionEditDialog、DeductionSpecificsDialog) のペーストビンは、http: //pastebin.com/AJQ6KCEN
に
あります。