首先,我知道有很多类似的问题,但是,这些建议都没有。
我有一个ViewPager,我想与片段一起使用。 ViewPager可以正常工作,并且我可以在日志中看到可以左右滚动。当我尝试向左滚动并且没有上一个项目时(或者在没有后续项目的情况下向右),我可以看到动画。但是,屏幕保持空白。该片段本身具有功能,但是,我在不同的上下文中对其进行了尝试。
我正在使用androidx
命名空间包。
我尝试过的事情(<-->
意味着我都尝试过):
FragmentPagerAdapter
<-> FragmentStatePagerAdapter
getFragmentManager()
<-> getChildFragmentManager()
作为适配器的FragmentManager
setSaveFromParentEnabled
为假。setOffscreenPageLimit
到碎片数。相关代码(我已取出与该问题无关的代码部分):
包含Fragment
的{{1}}:
ViewPager
public class AddListingMediaFragment extends Fragment {
private ViewPager viewPagerTop;
private AddMediaAdapter addMediaAdapter;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_add_listing_media, container, false);
setupViewPagerTop(view);
return view;
}
private void setupViewPagerTop(View view) {
viewPagerTop = view.findViewById(R.id.view_pager_top);
addMediaAdapter = new AddMediaAdapter(getChildFragmentManager());
viewPagerTop.setAdapter(addMediaAdapter);
viewPagerTop.setSaveFromParentEnabled(false);
viewPagerTop.setOffscreenPageLimit(5);
}
}
(请注意,如上所述,我已经尝试过Adapter
和FragmentPagerAdapter
:
FragmentStatePagerAdapter
布局文件:
public class AddMediaAdapter extends FragmentPagerAdapter {
private static final String TAG = AddMediaAdapter.class.getSimpleName();
public AddMediaAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return 5;
}
@Override
public Fragment getItem(int position) {
Log.i(TAG, "getItem: " + String.valueOf(position));
return new AddListingMediaCameraFragment();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
}
答案 0 :(得分:3)
您不需要在适配器中覆盖isViewFromObject
,FragmentPagerAdapter
已经处理了它。 ViewPager
调用此方法来决定如何呈现页面。
您的view == object
将返回false,因为该对象始终是Fragment
而不是View
。因此,只需删除覆盖,它将解决此问题。