2017-01-28 10 views
0

私はこの問題の解決に2時間を費やしました。コードは昨日働いていましたが、今日はViewPagerを実行しようとしたときに、フラグメントを表示しませんでした。デバッグ後、私はFragmentPagerAdapterの中のgetcount()が呼び出されたことに気付きましたが、私のgetItem()は決してしません。誰かが自分のコードに何が間違っているか教えてもらえますか?FragmentPagerAdapter never getItem()は呼び出されません

マイViewPagerFragmentクラス:

public class ViewPagerFragment extends Fragment { 


public static final String ARGS_KEY="schedules"; 


ViewPager mViewPager; 
ArrayList<Schedule> mSchedules; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view=inflater.inflate(R.layout.fragment_view_pager,container,false); 
    ButterKnife.bind(this,view); 

    mViewPager= (ViewPager) view.findViewById(R.id.viewPager); 
    mSchedules= Parcels.unwrap(getArguments().getParcelable(ARGS_KEY)); 

    final ArrayList<Fragment> fragments=setupFragments(mSchedules); 
    ViewPagerAdapter viewPagerAdapter=ViewPagerAdapter.initializeWithFragmentList(fragments,getChildFragmentManager()); 

    mViewPager.setAdapter(viewPagerAdapter); 

    return view; 
} 


private ArrayList<Fragment> setupFragments(ArrayList<Schedule> Schedules){ 
    ArrayList<Fragment> fragments=new ArrayList<>(); 

    for (Schedule schedule:Schedules){ 
     ViewPagerItemFragment fragment= createViewPagerItem(schedule); 
     fragments.add(fragment); 
    } 

    return fragments; 
} 

public ViewPagerItemFragment createViewPagerItem(Schedule schedule){ 
    Checker.checkIfObjectNull(schedule); 
    ViewPagerItemFragment viewPagerItemFragment=new ViewPagerItemFragment(); 
    setArgsForFragment(viewPagerItemFragment,schedule); 

    return viewPagerItemFragment; 
} 

private ViewPagerItemFragment setArgsForFragment(ViewPagerItemFragment fragment,Schedule schedule){ 
    Bundle args=new Bundle(); 
    args.putParcelable(ViewPagerItemFragment.ARGS_KEY,Parcels.wrap(schedule)); 
    fragment.setArguments(args); 

    return fragment; 
} 

マイViewPagerAdapterクラス:

public class ViewPagerAdapter extends FragmentPagerAdapter { 

ArrayList<Fragment> mFragments; 


public static ViewPagerAdapter initializeWithFragmentList(ArrayList<Fragment> fragments, FragmentManager fragmentManager){ 
    return new ViewPagerAdapter(fragmentManager,fragments); 
} 

private ViewPagerAdapter(FragmentManager fm,ArrayList<Fragment> fragments) { 
    super(fm); 
    mFragments=fragments; 
} 


@Override 
public Fragment getItem(int position) { 
    return mFragments.get(position); 
} 

@Override 
public int getCount() { 
    return mFragments.size(); 
} 

}

+0

'initializeWithFragmentList'静的メソッドは必要ありません。コンストラクタをpublicにします。 'mSchedules'が空の場合は、フラグメントはありませんので、forループをデバッグしてください。 –

+0

@ cricket_007ループをデバッグしてmSchedulesがnullでなくフラグメントが作成され、ViewPagerAdapterコンストラクタに渡されました。デバッグ時にgetCount()MFragments.size()は3を返し、通常はgetItem()を3回呼び出す必要がありますが、呼び出されることはありません。私は問題が何であるか分かりません。コードが正常に動作しているようです。 – samatovS

+0

3ページ以上を読み込みます。デフォルトのビューページの動作では、3つのフラグメントを同時にメモリにロードできます。メソッドが再度呼び出される必要はありません –

答えて

0

さて、私は問題を発見しました。それは本当にばかげたことです。私はgenymotionエミュレータを使用し、何らかの理由で自分のコードを正しくデバッグしていませんでした。エミュレータを再起動すると、問題が解決したようです。

関連する問題