2016-10-21 11 views
0

私は5つのフラグメントを含むビューページャーを含むアクティビティ "A"を持っています。 フラグメントの1つに、プログラムで追加された7-8個以上のフラグメントがあります。 各フラグメントは、それぞれのフラグメントで定義された静的メソッドinstance()を使用してインスタンス化されます。フラグメント - ブランク画面内のページャーとフラグメントを表示

for(int i = 0 ; i < 10; i++) { 
    CustomFragment fragment = (CustomFragment) Class.forName(classNameList.get(i)).instance(); 
    getFragmentManager().beginTransaction().add(R.id.parentLinearLayout, fragment, fragmentTag).commitAllowingStateLoss(); 
} 

このアクティビティが起動され、異なるフラグメント間を移動すると、すべて正常に動作します。

私はアクティビティ "B"を起動し、アクティビティ "A"に戻るとします。ビューページャ内の他のすべてのフラグメントは、フラグメントのセットを含むフラグメントを除いて正常にロードされます。 空白の画面として表示されます。何が問題なの?

+0

コンストラクタを使用してそのフラグメントを初期化していますか? – MohanadMohie

+0

はい私は.. @MohanadMohieはそれがどんな意味で重要で影響を与えますか? –

+0

もちろん。アクティビティのようなフラグメントは、コンストラクタを使用せずにAndroidシステムによってインスタンス化されるため、コンストラクタで渡すアイテムは、Androidがフラグメントを再インスタンス化するときに無視されます。 ViewPagerで使用する前に、フラグメントに引数を追加することができます。私は短いショーの例で答えを掲示します。 – MohanadMohie

答えて

0

あなたのフラグメントをインスタンス化してパラメータを渡すためにコンストラクタを使用しています。アンドロイドがフラグメントをインスタンス化すると、コンストラクタは使用されないため、パラメータは無視されます。パラメータを渡すには、引数を使用する必要があります。これは、あなたがそうすることができる方法の例です:

インサイドMyFragment.java:あなたのViewPagerアダプタ内部

private static final String KEY_ITEM = "item"; 

public static MyFragment getFragment(String myItem) { 
    MyFragment fragment= new MyFragment(); 
    Bundle args = new Bundle(); 
    args.putString(KEY_ITEM, myItem); 
    fragment.setArguments(args); 
    return fragment; 
} 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    String myItem = getArguments().getString(KEY_ITEM); 
} 

:もちろん

@Override 
    public Fragment getItem(int position) { 
     return MyFragment.getFragment("Your parameter here."); 
    } 

、私はシングルを使用しました文字列をパラメータとして追加することができます。

関連する問題