[解決済み] Android ナビゲーションコンポーネントにおける戻るボタンの扱いについて
質問
ナビゲーションコントローラーを使用して、システムの戻るボタンのアクションを適切に処理する方法を知りたいです。私のアプリには2つのフラグメント(例:fragment1 と fragment2)があり、fragment1 で fragment2 に移動するアクションがあります。ユーザーがfragment2のシステムバックボタンを押すと、終了を確認するダイアログ(例えばDialogFragmentを使用)を表示したいのですが、1つのことを除いてすべてうまく動作します。この動作を実装するための最良の方法は何でしょうか?もし、私が
app:defaultNavHost="true"
を使用すると、私のルールを無視して自動的に戻ってしまいます。さらに、このコンポーネントは何のためにあるのでしょうか?
pop to"を使用した方が良いのでしょうか?
どのように解決するのですか?
最新更新情報 - 2019年4月25日
新規リリース androidx.activity ver. 1.0.0-alpha07 いくつかの変更点があります。
詳しくはandroid公式ガイドをご覧ください。 カスタムバックナビゲーションの提供
例
public class MyFragment extends Fragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// This callback will only be called when MyFragment is at least Started.
OnBackPressedCallback callback = new OnBackPressedCallback(true /* enabled by default */) {
@Override
public void handleOnBackPressed() {
// Handle the back button event
}
};
requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
// The callback can be enabled or disabled here or in handleOnBackPressed()
}
...
}
旧アップデート
UPD:2019年4月3日
現在は簡略化されています。より詳細な情報 ここで
例です。
requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), this);
@Override
public boolean handleOnBackPressed() {
//Do your job here
//use next line if you just need navigate up
//NavHostFragment.findNavController(this).navigateUp();
//Log.e(getClass().getSimpleName(), "handleOnBackPressed");
return true;
}
非推奨 (バージョン1.0.0-alpha06以降 2019年4月3日):
から
これ
であるため、単に
JetPack
実装
OnBackPressedCallback
をフラグメントに追加します。
を作成し、アクティビティに追加します。
getActivity().addOnBackPressedCallback(getViewLifecycleOwner(),this);
フラグメントは次のようになります。
public MyFragment extends Fragment implements OnBackPressedCallback {
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getActivity().addOnBackPressedCallback(getViewLifecycleOwner(),this);
}
@Override
public boolean handleOnBackPressed() {
//Do your job here
//use next line if you just need navigate up
//NavHostFragment.findNavController(this).navigateUp();
//Log.e(getClass().getSimpleName(), "handleOnBackPressed");
return true;
}
@Override
public void onDestroyView() {
super.onDestroyView();
getActivity().removeOnBackPressedCallback(this);
}
}
UPDです。
あなたのアクティビティは
AppCompatActivity
または
FragmentActivity
とGradleファイルに記述します。
implementation 'androidx.appcompat:appcompat:{lastVersion}'
関連
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み] 深くネストされたスタックから離れるとき、Fragmentのバックスタックをクリーンアップする方法はこれで良いのでしょうか?
-
[解決済み] Android - タイトルバーに戻るボタンが表示される
-
[解決済み] XMLで矩形を描画できますか?
-
[解決済み] 非ActivityクラスでContextを取得する [重複].
-
[解決済み] APKが署名済みかデバッグビルドかを確認するには?
-
[解決済み] google-services.jsonって実際何してるの?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Androidで他のフラグメントに移動した後、ナビゲーションスタックをクリアする方法
-
[解決済み] ArrayAdapter<myClass> の使用方法
-
[解決済み] Eclipseでのandroid:configChangesでのAdmobエラー
-
[解決済み] getApplication()、getApplicationContext()、getBaseContext()、someClass.thisの違いと使い分け。
-
[解決済み] DialogFragmentを正しく終了させるには?
-
[解決済み] アンドロイドのクライアントでヒープアップデートを有効にする方法
-
[解決済み] FragmentPagerAdapterのgetItemが呼び出されない
-
[解決済み] TextView.setTextSizeの挙動がおかしい - テキストビューのテキストサイズを画面ごとに動的に設定する方法
-
[解決済み] アンドロイドボタンセレクター
-
[解決済み] 文字列リソースにHTML?