Фрагмент пуст во ViewPager - PullRequest
       8

Фрагмент пуст во ViewPager

0 голосов
/ 30 октября 2018

Прежде всего: я знаю, что есть ряд подобных вопросов, однако ни одно из предложений не сработало.

У меня есть 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>

1 Ответ

0 голосов
/ 30 октября 2018

Вам не нужно переопределять isViewFromObject в вашем адаптере, FragmentPagerAdapter уже позаботился об этом. ViewPager вызывает этот метод, чтобы решить, как отображать страницы.

Ваш view == object вернет false, потому что объект всегда Fragment, а не View. Так что просто отбросьте переопределение, и это решит проблему.

...