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();
}
}
'initializeWithFragmentList'静的メソッドは必要ありません。コンストラクタをpublicにします。 'mSchedules'が空の場合は、フラグメントはありませんので、forループをデバッグしてください。 –
@ cricket_007ループをデバッグしてmSchedulesがnullでなくフラグメントが作成され、ViewPagerAdapterコンストラクタに渡されました。デバッグ時にgetCount()MFragments.size()は3を返し、通常はgetItem()を3回呼び出す必要がありますが、呼び出されることはありません。私は問題が何であるか分かりません。コードが正常に動作しているようです。 – samatovS
3ページ以上を読み込みます。デフォルトのビューページの動作では、3つのフラグメントを同時にメモリにロードできます。メソッドが再度呼び出される必要はありません –