1. ホーム
  2. android

[解決済み] フラグメントを使ったアクションバーアップナビゲーション

2023-02-12 16:22:45

質問

私はタブ付きのActionbar/viewpagerレイアウトを持っていて、3つのタブがあります。 A , B であり、かつ C . タブでは C タブ(fragment),私は別のフラグメントを追加しています。 D とします。

 DFragment f= new DFragment();
 ft.add(android.R.id.content, f, "");
 ft.remove(CFragment.this);
 ft.addToBackStack(null);
 ft.commit();

DFragmentのonResumeのactionbarを修正して、upボタンを追加しています。

ActionBar ab = getActivity().getActionBar();
ab.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
ab.setDisplayHomeAsUpEnabled(true);
ab.setDisplayShowHomeEnabled(true);

現在、DFragmentで、ハードウェア(電話)のBackボタンを押すと、CFragmentを選択した状態で、元のTabbed(ABC)レイアウトに戻ります。この機能をアクションバーの上ボタンで実現するにはどうしたらよいでしょうか。

どのように解決するのですか?

実装 OnBackStackChangedListener を実装し、このコードをFragment Activityに追加してください。

@Override
public void onCreate(Bundle savedInstanceState) {
    //Listen for changes in the back stack
    getSupportFragmentManager().addOnBackStackChangedListener(this);
    //Handle when activity is recreated like on orientation Change
    shouldDisplayHomeUp();
}

@Override
public void onBackStackChanged() {
    shouldDisplayHomeUp();
}

public void shouldDisplayHomeUp(){
   //Enable Up button only  if there are entries in the back stack
   boolean canGoBack = getSupportFragmentManager().getBackStackEntryCount()>0;
   getSupportActionBar().setDisplayHomeAsUpEnabled(canGoBack);
}

@Override
public boolean onSupportNavigateUp() {
    //This method is called when the up button is pressed. Just the pop back stack.
    getSupportFragmentManager().popBackStack();
    return true;
}