1

私のアクティビティはナビゲーション ドロワーで構成されており、現在、左側のメニューに 5 つのオプションがあります。これはすべて断片的に開きます。

すべてのフラグメントのスタックを保持する方法を探しているので、ユーザーが戻るボタンを押すと、前のフラグメントに移動します。

Like-Activity は、対応するフラグメント F1、F2、F3、F4、F5 を持つ 5 つのオプション menu1、menu2、menu3、menu4、menu5 を持つドロワー メニューで構成されます。

ユーザーが menu1 を押すと、F1 に転送されます。次に menu2 を押し、次に menu4 を押します。

ユーザーが F4 にいるときにボタンを押すと、アクティビティまたはアプリを終了するのではなく、F2 に移動する必要があります。

どのように実装できるか、例またはサンプル コードを優先します。

現在このコードを使用していますが、役に立ちません

FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
       .replace(R.id.frame_container, fragment)
       .addToBackStack(null)
       .commit();
4

3 に答える 3

1

クエリの回避策を見つけました:

  1. onBackPressed()コードでオーバーライド

  2. すべてのフラグメント トランザクションを含むバックスタックに関連するメソッドを使用する

    public void onBackPressed(){
    
    FragmentManager fm = getFragmentManager();
    
        if (fm.getBackStackEntryCount() > 0) {
    
            Log.i("MainActivity", "popping backstack");
    
            fm.popBackStack();    // this will display last visible fragment
            getActinBar().setTitle(mTitle);    // save your title in some variable and restore here
    
        } else {
    
             Log.i("MainActivity", "nothing on backstack, calling super");
    
             super.onBackPressed();  // system will handle back key itself
    
        }
    
     }
    

参考回答:こちら

于 2015-04-07T05:22:35.180 に答える
1

以下のようにフラグメントを置き換えていました:

public void replaceFragment(Fragment fragment, boolean addToBackStack, int transition) {
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.activity_main_relative_container, fragment, fragment.getClass().getName());
    ft.setTransition(transition);
    if (addToBackStack) {
        ft.addToBackStack(fragment.getClass().getName());
    }
    ft.commitAllowingStateLoss();
}

// While to replace Fragment
replaceFragment(mFragment, true, FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
// False for not adding Fragment in back stack and true to add.

お役に立てれば。

于 2015-04-07T05:16:12.530 に答える
0

バックスタックにフラグメントを追加する必要があります

private FragmentTransaction m_fragmentTransaction;
FragmentOne m_fragOne = new FragmentOne();
m_fragmentTransaction = m_fragmentManager.beginTransaction();
m_fragmentTransaction.replace(R.id.dl_flContainer, m_fragOne , FragmentOne.class.getSimpleName());
m_fragmentTransaction.addToBackStack(FragmentOne.class.getSimpleName());
        m_fragmentTransaction.commit();
于 2015-04-07T05:26:51.953 に答える