0

私は1つのアクティビティでホストされている多くのフラグメントを持っています。 Activityには、ツールバー、DrawerLayout、menu_iconをクローズド・ドロワで開くActionBarがあります。 1つのFragmentではアイテムのリストを表示します。ユーザーがアイテムをクリックすると、そのアイテムのDetailFragmentが表示されます。私が欲しいもの1つのアクティビティでホストされているフラグメントで作業する場合、ActionBarのタイトルとアイコンを管理するにはどうすればいいですか?

は、ユーザーが適切なタイトルをback_iconして設定することDetailFragmentにあるときmenu_iconを交換することで、ユーザーがこのback_iconをクリックしたときに、私はDetaiFragment backstackからと再びがhome_iconを示すことをポップにしたいです。ホームアイコンをクリックすると、アイコンは現在のフラグメントに応じて異なる動作をする必要があります。

そして、私はDetailFragmentのActivityを使いたくありません。アクションバーのアイコンとアクションを1か所で管理する方法はありますか(アクティビティのホスト)?

+0

では、カスタムフラグメントツールバーを使用して、フラグメントのアクティビティツールバーを置き換えることができます。 – Umair

+0

@Umairというのは、各フラグメントごとに別々のActionBar(ツールバー)を作成するという意味ですか?私はそれがアクティビティのActionBar(ツールバー) – madim

+0

の下に行くと思うonCreateOptionsMenuのメニューをクリアし、hambrugerアイコンを変更し、homebackpressを処理します。 – Karun

答えて

0

私はここに答えが見つかりました:ツールバーや引き出しを設定した後、私は

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setupToolbar(R.drawable.ic_menu); 
    setupNavigationDrawer(); 

    getSupportFragmentManager().addOnBackStackChangedListener(this); 
} 

backstackの変化のための残りの部分を、リスナーを初期化し、活動をホスト上のonCreateでhttps://stackoverflow.com/a/20314570/5222156

をコードは元の回答とほとんど同じです:

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

public void shouldDisplayHomeUp() { 
    //Enable Up button only if there are entries in the back stack 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    int count = fragmentManager.getBackStackEntryCount(); 

    Fragment fr = fragmentManager.findFragmentById(R.id.flContent); 
    String tag = fr.getTag(); 

    boolean canGoBack = count > 0; 
    ActionBar actionBar = getSupportActionBar(); 
    if (actionBar != null) { 
     actionBar.setHomeAsUpIndicator(canGoBack ? R.drawable.ic_arrow_back : R.drawable.ic_menu); 
     actionBar.setTitle(tag); 
    } 
} 

@Override 
public boolean onSupportNavigateUp() { 
    boolean canGoBack = getSupportFragmentManager().getBackStackEntryCount() > 0; 

    if (canGoBack) { 
     navigationController.navigateBack(); 
    } else { 
     mDrawerLayout.openDrawer(Gravity.START); 
    } 
    return true; 
} 

@Override 
public void onBackPressed() { 
    if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) { 
     closeDrawer(); 
    } else { 
     super.onBackPressed(); 
    } 
} 
0

アクティビティへの参照を取得するには、getActivity()を使用してください。そしてもちろん、あなたはgetActivity().setTitle("Details")でタイトルを設定し、アイコンをgetActivity().getActionBar().setIcon(R.drawable.back_icon)に変更することができます。

編集:これを使用して、フラグメント内の戻るボタンを有効にすることもできます。 onCreate()メソッドに配置します。また、互換性のためにgetSupportActionBar()を使用することもできます。

getActivity().getActionBar().setHomeButtonEnabled(true); getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);

+0

だから私はすべてのフラグメントでこれらのメソッドを使用する必要がありますか? 1つの場所でそれを管理する方法はありますか(アクティビティのホスト)? – madim

+0

@madim私は親フラグメントを作成し、そのコードをonCreate()メソッドに置き、すべてのフラグメントが親フラグメントを拡張するようにします。 – Linus

関連する問題