Прежде всего: я знаю, что есть ряд подобных вопросов, однако ни одно из предложений не сработало.
У меня есть ViewPager, который я хотел бы использовать с фрагментами. ViewPager работает, и я вижу в журнале, что могу прокручивать влево и вправо. Я вижу анимацию, когда пытаюсь прокрутить влево, а предыдущего элемента нет (или вправо, если следующего элемента нет). Тем не менее, экран остается пустым. Сам фрагмент функционален, но я пробовал его в другом контексте.
Я использую androidx
пространства имен.
То, что я пробовал (<-->
означает, что я пробовал оба):
FragmentPagerAdapter
<-> FragmentStatePagerAdapter
getFragmentManager()
<-> getChildFragmentManager()
как FragmentManager
для адаптера
setSaveFromParentEnabled
в ложь.
setOffscreenPageLimit
на количество фрагментов.
Соответствующий код (я вынул части кода, не относящиеся к этому вопросу):
Fragment
, который содержит 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;
}
}
Файл макета:
<?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>