フラグメントAを呼び出すアクティビティBがあり、フラグメントBを呼び出すアクティビティAがあります。ユーザーがCfに戻ることができるように、Cfが呼び出されたときにBfがバックスタックに配置されるようにします。ただし、Cfで特定のボタンが押された場合、バックスタックからBfを削除したいと思います。これは可能ですか?
PopBackStack()関数があることがわかります。ただし、これがどのように機能するかについては少し混乱しています。この機能を使用しても安全ですか?別のアプリケーションからのアクティビティがバックスタックのBfの後に挿入される可能性はありますか?
また、バックスタック上のフラグメントのsavedInstanceStateを変更する方法はありますか?
エミュレータを使用してバックスタックで堅牢なテストを実行する方法がわかりません。
フラグメントを名前でポップできます。バックスタックにフラグメントを追加するときに、名前を付けます。
fragmentTransaction.addToBackStack("fragB");
fragmentTransaction.addToBackStack("fragC");
次に、Fragment_Cで、名前を使用してバックスタックをポップします。つまり、fragB
およびinclude POP_BACK_STACK_INCLUSIVE
someButtonInC.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = getActivity()
.getSupportFragmentManager();
fm.popBackStack ("fragB", FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
});
BackStackからフラグメントをポップする3つの方法
この行を追加するだけです
getActivity().getSupportFragmentManager().popBackStack();
2.#
getActivity().getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
3.#
getActivity().getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
フラグメントをbackdtackからポップする簡単な方法
最初にフラグメントcontainer_viewを置き換えます。そのとき、「Later Transaction」のような名前を追加します
getSupportFragmentManager().beginTransaction().replace(R.id.container_view,
profileFragment, "Profile").addToBackStack("Later Transaction").commit();
その後、バックプレスボタンで、Later Transaction名を使用してバックスタックをポップします
int count = getSupportFragmentManager().getBackStackEntryCount();
if(count > 1) {
getSupportFragmentManager().popBackStack("Later Transaction",
FragmentManager.POP_BACK_STACK_INCLUSIVE);
} else {
DialogUtils.show(HomeActivity.this,
getString(R.string.exit_app_message), getString(R.string.alert),
"Yes","No", new DialogUtils.ActionListner() {
@Override
public void onPositiveAction() {
finish();
}
@Override
public void onNegativeAction() {
}
});
}