2017-08-04 17 views
0

私のアプリには3つのタブを持つアクティビティがあり、それぞれにListFragmentが含まれています。 ListFragmentが異なるコンテンツを表示する必要がありますが、私はそれが上書きされてしまいますバンドルを通してそれを渡すと私は同じ内容(最新のもの)との3つの断片を得るとき は、ここでは、コードです:異なるフラグメントを別のフラグメントに渡すアクティビティのタブ付き

活動ののonCreateメソッドで:フラグメントクラスの

{... 
Fragment fragment; 
Bundle bundle= new Bundle(); 
for(int i = 0; i<CATEGORIES.size(); i++) { 

     fragment = new MyListFragment(); 
     bundle.putSerializable("Data", data.get(i)); 
     fragment.setArguments(bundle); 
     screens.put(CATEGORIES.get(i),fragment); 
} 
    setUpViewPagerAndTabs(); 
    ... 
    ... } 

protected void setUpViewPagerAndTabs(){ 
    mViewPager = (ViewPager) findViewById(R.id.viewpager); 
    mViewPager.setOffscreenPageLimit(screens.size()+1); 
    mAdapter = new PageAdapter(screens, getSupportFragmentManager()); 
    mViewPager.setAdapter(mAdapter); 

    tabs = (TabLayout) findViewById(R.id.tabs); 
    tabs.setTabGravity(TabLayout.GRAVITY_FILL); 
    tabs.setTabMode(TabLayout.MODE_FIXED); 
    tabs.setupWithViewPager(mViewPager); 
} 

このラインは、対応するデータの上書きを生成する:

ArrayList<String> names = (ArrayList<String>) 
    b.getSerializable(Activity.DATA); 

IはOで、フラグメントにカウンタ(i)の値を通過しようとする場合であってもrderはフラグメント内のデータの正しい要素を選択するために上書きされます。 どうすれば解決できますか? ありがとうございました

答えて

1

場合はわかりません。しかし、参照を同じバンドル(範囲外)に3つのフラグメントすべてに渡しています。シリアライゼーション/デシリアライゼーションがいつ有効になるかによって異なりますが、ループの後にバンドルの同じ内容(最後のもの)を指す3つのフラグメントがあります。

は、ループ内のバンドルの作成を移動しよう:

for(int i = 0; i<CATEGORIES.size(); i++) { 
    Bundle bundle= new Bundle(); 
    fragment = new MyListFragment(); 
    bundle.putSerializable("Data", data.get(i)); 
    fragment.setArguments(bundle); 
    screens.put(CATEGORIES.get(i),fragment); 
} 
+0

あなたは右、どのような愚かなエラーです。どうもありがとうございました。 – paola91

関連する問題