2017-11-15 2 views
1

ナビゲーションドロワー付きのActivityがあります。私はこのために断片を使用しました。引き出しの異なるメニューに移動するときには、addToBackStack()メソッドでバックスタックに追加します。私は断片Bまたは断片Cに行けば基本的には、フラグメントAActivity始まりは、私は戻って押すことができますし、フラグメントAに戻ります。複数のフラグメントを同時に置換する

しかし、今、私はフラグメントBオープンでActivityを開く必要があり、私は戻って押したときに、それはフラグメントAに私を取り戻す必要があるの通知を持っています。 startActivitiesのようにこれを処理する方法はありますか?ここで

Activityのコードです:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    ... 

    getSupportFragmentManager().beginTransaction().replace(R.id.layoutContent, new FragmentA()).commit(); 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.buttonA: 
      getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 

      break; 

     case R.id.buttonB: 
      transactFragment(new FragmentB()); 

      break; 
     ... 
    } 
} 

private void transactFragment(Fragment fragment) { 
    getSupportFragmentManager().beginTransaction().replace(R.id.layoutContent, fragment).addToBackStack(fragment.getClass().getName()).commit(); 
} 
+0

2つのトランザクションを作成してコミットします。 – toshkinl

+0

@toshkinlうん、私はそれを試みたが、それは奇妙に見えるアニメーションを作成します。フラグメントを除いて[ここ](https://developer.android.com/training/implementing-navigation/temporal.html)のようにしたいと思っています。 –

+0

アニメーションはいつでも削除できます。 FragmentTransaction ft = getSupportFragmentManager()。beginTransaction(); ft.setCustomAnimations(0、0); – toshkinl

答えて

1

理由だけではなく、タグを有する断片を定義し、あなたに必要があるとして、それらを呼び出しますか?ここで

は、私は私の断片をどのように動作するかのサンプルです:

そうのように、 Activityさん onCreate()方法であなたの断片を起動

/** Load screen1 */ 
    Instructions screen1 = new Instructions(); 
    screen1.setArguments(getIntent().getExtras()); 

    getFragmentManager().beginTransaction(). 
      add(com.example.tool.R.id. 
        instructions_container, screen1, "screen1"). 
      addToBackStack(null). 
      commit(); 

その後、あなたがそれらをつかむことができ、ショー/それらを隠しますあなたが好きなだけ:私のプロジェクトで

/** screen 1 */ 
public void showInstructions() 
{ 
    // show screen 1 
    getFragmentManager().findFragmentByTag("screen1"). 
      getView().setVisibility(View.VISIBLE); 
} 

を、私たちはアップ現在、あるフラグメントをチェックするためにグローバルな列挙型を使用しますので、我々はSTACに頼る必要はありませんk、それは一度以上は信頼できないと証明されています。

onBackはスイッチを呼び出し、このスイッチはこの列挙をチェックし、それに応じて動作します。あなたのユースケースでは、この通知がいつ呼び出されたのかを追跡できるので、フラグメントBからフラグメントAに移動します。

+0

実際の取引は問題ではありません。その通知を開いて開くと、他の「断片」に戻るために戻ることができる必要があります。 [this](https://developer.android.com/training/implementing-navigation/temporal.html)のようなものですが、断片があります。 –

+0

私のサンプルコードの重要な部分を省略したと思う:私のプロジェクトでは、グローバルな列挙型を使って現在どのフラグメントが存在しているかを調べるので、スタックに頼る必要はありません。信頼できない。 onBackはスイッチを呼び出すだけで、この列挙をチェックしてそれに応じて動作します。ユースケースでは、この通知がいつ呼び出されたかを追跡するだけで、フラグメントBからフラグメントAに移動します。これは意味がありますか? – Sipty

+0

ありがとう、これは私の理想的ではないが、それが動作する必要があるようです。あなたはあなたの答えを更新できるので、私はそれを正しいものとしてマークすることができます。 –

関連する問題