2016-11-12 16 views
0

線形レイアウトで複数のフラグメントを追加したい。この目的のために、私はForループを使い、フラグメントにデータを渡しています。各索引には異なるデータがあります。私の現在の問題は、マルチプレイ時に画面の最後のフラグメントしか見ることができないかもしれない、おそらく最上位のフラグメントやその他の理由が隠れている可能性があります。何が問題なのか理解していない。線形レイアウトでフラグメントを複数回プログラムで追加する

 categoryArrayList = dbHelper.getChannelInfo(); 
     fragmentManager =getSupportFragmentManager(); 
     ft = fragmentManager.beginTransaction(); 
     for (int i = 0; i<categoryArrayList.size(); i++) { 

     SubFragment frag = new SubFragment(); 
      Bundle bundle = new Bundle(); 
     bundle.putInt("ID", (categoryArrayList.get(i).getChannelCategoryId())); 
     bundle.putString("categoryName", categoryArrayList.get(i).getChannelName()); 
      frag.setArguments(bundle); 
      ft.add(R.id.container, frag,"fragment"+i); 
    } 
    ft.commit(); 
} 
} 

のxml:

<LinearLayout 
    android:id="@+id/container" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:layout_marginTop="50dp" 
    android:background="#252424" 
    android:layout_below="@id/headercontainer" 
    android:layout_marginLeft="30dp"> 

答えて

1

あなたは各Fragmentの引数に同じBundleを使用している、とFragmentTransaction sが非同期的に起こるので、彼らは最終的に実行すると、Fragment sはすべてが同じ議論を読んでいる。 forループ内にその

Bundle bundle = new Bundle(); 

移動し、put*()呼び出しの前に:

あなたはおそらくループの前に、次のようなものを持っています。

+0

これですべてがなくなり、画面上に断片が表示されません。 – Andrain

+0

?それは意味がありません。もしあなたがしたことが、 'put *()'の呼び出しの前にその行を移動していれば。正確にあなたは何を変えましたか? –

+0

投稿したコードを空のプロジェクトに投げただけで、 'categoryName'と' ID'引数を表示する 'TextView'の単純な' SubFragment'を作ったのです。 'Bundle'行を動かすのは、表示された引数を修正することだけでした。それがすべて変更されたことが絶対に確実な場合は、あなたのコードにあなたの投稿にない何か他のものがなければなりません。あなたの質問を今のようにコードで編集してください。もう少しそのコードを編集してください。 –

関連する問題