Reputation: 1581
First off: I am aware there are a number of similar questions, however, none of the suggestions worked.
I have a ViewPager that I would like to use with fragments. The ViewPager works, and I can see in the log that I can scroll left and right. I can see the animation when I try to scroll left and there's no previous item (or right when there's no following item). However, the screen remains blank. The fragment itself is functional, however, I've tried it in a different context.
I am using the androidx
namespaced packages.
Things I've tried (<-->
means I've tried both):
FragmentPagerAdapter
<--> FragmentStatePagerAdapter
getFragmentManager()
<--> getChildFragmentManager()
as the FragmentManager
for the adaptersetSaveFromParentEnabled
to false.setOffscreenPageLimit
to the number of fragments.Relevant code (I have taken out sections of code that are irrelevant to this question):
The Fragment
that contains the 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);
}
}
The Adapter
(please do note, as mentioned, that I've tried both FragmentPagerAdapter
and 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;
}
}
The layout file:
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.viewpager.widget.ViewPager
android:id="@+id/view_pager_top"
android:layout_width="300dp"
android:layout_height="300dp"
/>
<include
layout="@layout/bottom_sheet_add_listing_media_gallery"
/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
Upvotes: 2
Views: 354
Reputation: 3894
You do not need to override isViewFromObject
in your adapter, FragmentPagerAdapter
has already taken care of it. ViewPager
calls this method to decide how to render the pages.
Your view == object
will return false because the object is always a Fragment
not a View
. So just drop the override, and it will fix the issue.
Upvotes: 3