Fragment側で端末の戻るボタン(バックキー)をハンドリングし、特定の処理を行う!
当初Fragment側で戻るボタンの制御をしたいと考えていたが、ActivityにてonBackPressed()をOverrideし、制御する必要があるとのことなので、以下のように実装し動作させることができた
ざっくり流れとしては以下
- Activityで戻るボタン押下時の処理をOverride
- Interfaceを通しActivityからFragmentに戻るボタン押下イベントを伝える
- Fragment側でInterfaceを継承し、特定の処理を実装
まず大元のActivityに以下を追加
@Override
public void onBackPressed() {
Fragment fragment = getSupportFragmentManager().findFragmentByTag("handlingBackPressed");
if (fragment instanceof OnBackKeyPressedListener) {
((OnBackKeyPressedListener) fragment).onBackPressed();
}
super.onBackPressed();
}
findFragmentByTagに、適当な名前を付与しておく。
ここでは"handlingBackPressed"としておく
次に、インターフェースを作成する
OnBackKeyPressedListener.java
public interface OnBackKeyPressedListener {
void onBackPressed();
}
次に、戻るボタンの制御をしたいFragment生成時に、"handlingBackPressed"タグを追加
fragment = new HogeFragment();
manager.beginTransaction().replace(R.id.main_area_layout, fragment, "handlingBackPressed").addToBackStack(null).commit();
HogeFragmentので作成したインターフェースを継承し、onBackPressed()内に特定の処理を追加
public class FavoriteItemListFragment implements OnBackKeyPressedListener {
・・・・
@Override
public void onBackPressed() {
//バックキーイベントをハンドリングし、必要な処理を記載。
//例えばActivityが制御するToolbarエリアのテキストを表示させるなど
TextView leftToolbarText = mContext.findViewById(R.id.tool_bar_left_text);
leftToolbarText.setVisibility(View.VISIBLE);
}
以上です!