2017-02-27 10 views
0

私はViewPagerで主なアクティビティを持っています。 ViewPagerにアダプタを使用してデータを取り込もうとしています。AndroidフラグメントonCreateViewには初期化にもかかわらずnull ArrayListがあります

これは私のフラグメントクラスです。

public class ClassListFragment extends Fragment { 

private List<item_timetable_class> _classList; 

public ClassListFragment() { 
} 

public ClassListFragment SetClassList (List<item_timetable_class> classList) { 
    ClassListFragment fragment = new ClassListFragment(); 
    fragment._classList = classList; 
    return fragment; 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    // some code here 

    //In this line I am getting _classList = Null   

     class_card_adapter adapter = new class_card_adapter(_classList, getContext()); 

    // some code here 
    } 

} 

これは私がフラグメントを呼び出す方法です。新しいClassListFragmentオブジェクトを作成した直後に、内部変数_classListがSetになるようにSetClassListを呼び出しています。

残念ながら、メインアクティビティで次の行が実行されているときにonCreateViewメソッドが実行されています。

mViewPager.setAdapter(mSectionsPagerAdapter); 

その時点で、List _classListはnullになっています。

何が問題になる可能性があり、どのように問題を解決できますか?

答えて

0

あなたはClassListFragmentを作成している:

ClassListFragment newFragment = new ClassListFragment(); 

そしてSetClassListから返されたフラグメントへの参照を保持しません。

newFragment.SetClassList(classCardList); 

修正SetClassList

public ClassListFragment SetClassList (List<item_timetable_class> classLis) 
{ 
    _classList = classList; 
    return this; 
} 

そしてへの参照を保持返されたFragment

newFragment = newFragment.SetClassList(classCardList); 
0

参照してください:Best practice for instantiating a new Android Fragment

を(フラグメントの引数にBundleParcelableオブジェクトを使用している何をしたいですか正しい方法)


をとにかく、あなたは別の2と呼ばれますここで "コンストラクタ"。

ClassListFragment newFragment = new ClassListFragment(); 
newFragment.SetClassList(classCardList); 

public ClassListFragment SetClassList戻りnew ClassListFragment、それは現在の1を設定しません。


代わりにこれを試してください。

public static ClassListFragment newInstance(List<item_timetable_class> classList) { 
    ClassListFragment fragment = new ClassListFragment(); 
    fragment._classList = classList; 
    return fragment; 
} 

そして

for (int i = 0; i < weekday_list.size(); i++) { 
    mSectionsPagerAdapter.addFragment(
     ClassListFragment.newInstance(classCardList), 
     weekday_list.get(i)); 
    // i++; // You already increment this in the loop... 
} 
+0

! R.Zagórskiの回答には、コードの変更が最小限で済みます。ありがとう、あなたはすべて素晴らしいです! – BuggyCoder

0

私はどうなるのかこれである:あなたの答えは、より有益である

public static ClassListFragment newInstance(final List<item_time_table_class> classList) { 
ClassListFragment fragment = new ClassListFragment(); 
Bundle args = new Bundle() 
args.putParcelable(key, classList); 
fragment.setArguments(args); 
return fragment; 
} 

ClassListFragment::onCreate() { 
classList = getArguments().getParcelable(key); 
} 
関連する問題