2016-11-22 5 views
0

私はユーザーが小さなテストを受けることができるようにするアプリケーションを作成しています。したがって、PreTestFragment(ボタン「開始テスト」)、TestFragmentおよびPostTestFragment(テストの結果を含む)で構成されるTestActivityがあります。 TestFragmentは1つの質問をホストしているフラグメントになりますので、と表示したい場合は、複数回表示します(10としましょう)。同じフラグメントを何度も実行するには?

すべての私は、ユーザーが次のTestFragmentで押す毎にインクリメントされstaticカウンターを作っていたとまで来ることができ、それはカウンターが10

私はフラグメント管理に新たなんだに達した後、彼は辞めになり、だから、NEXTボタンのonClick()の実装でいくつかのエラーが起きたような気がします。

static private int current_question; 


public void onClick(View view) { 
    FragmentManager mng = getFragmentManager(); 
    FragmentTransaction fgmTr = mng.beginTransaction(); 
    Fragment currentFgm = mng.findFragmentByTag(FragmentTags.TEST_FTAG.toString()); 
    Fragment nextFgm; 
    Bundle bundle = currentFgm.getArguments(); 
    if (current_question < 10) { // test still running 
     current_question++; 
     nextFgm = mng.findFragmentByTag(FragmentTags.TEST_FTAG.toString()); 
     // ... 
     // putting needed data in the bundle 
     // ... 
     if (nextFgm == null) 
      nextFgm = new TestFragment(); 
    } else { // test is finished 
     nextFgm = mng.findFragmentByTag(FragmentTags.POST_FTAG.toString()); 
     // ... 
     // putting different needed data in the bundle 
     // ... 
     if (nextFgm == null) 
      nextFgm = new PostTestFragment(); 
    } 
    nextFgm.setArguments(bundle); 
    fgmTr.replace(R.id.test_body, nextFgm, FragmentTags.POST_FTAG.toString());  
    fgmTr.addToBackStack(null); 
    fgmTr.commit(); 
} 


@Override 
public void setArguments(Bundle args) { 
    super.setArguments(args); 
    // Should I use if-else here too to pass different data in the bundle? 
} 

それを実行し、「NEXT」私は次のエラーを取得初めて押す:このコードを修正する方法

java.lang.IllegalStateException: Fragment already active

を?

+0

このコードが間違っていますか?あなたはそれが何をすると期待していますか? – Bryan

+0

@ブライアンありがとう!編集したメッセージを確認してください – Robb1

+0

あなたはスワイプビューを使ってこのデザインを再考することができます! – Eenvincible

答えて

0

通常、私はそれがによってたびに新しいフラグメントのインスタンスを作成しました:

android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.frame, new myFragment); 
    fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 
関連する問題