Как обновить фрагмент при переключении между вкладками с помощью FragmentStatePagerAdapter?

Я пытаюсь заставить макет вкладки работать с общим фрагментом, которому передается строка аргумента с именем category, которая используется для фильтрации запроса, отображаемого в действии, в зависимости от положения вкладки. Это мое ClothingSectionsPagerAdapter класс, который обрабатывает это.

public class ClothingSectionsPagerAdapter extends FragmentStatePagerAdapter {

    private String[] mCategories;

    public ClothingSectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    public void setContext(Context context) {
        mCategories = context.getResources().getStringArray(R.array.category);
    }

    @Override
    public Fragment getItem(int position) {
        return ClothingCategoryFragment.newInstance(mCategories[position]);
    }

    @Override
    public int getCount() {
        return mCategories.length;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mCategories[position];
    }
}

Фрагмент, которому передается строковый аргумент, должен на экране загрузить предметы одежды с этой категорией. Вот мой фрагмент.

public class ClothingCategoryFragment extends Fragment {

    @BindView(R.id.catalog_swipe_refresh_layout)
    SwipeRefreshLayout mCatalogRefreshLayout;

    @BindView(R.id.catalog_recycler_view)
    RecyclerView mCatalogRecyclerView;

    private CatalogAdapter mCatalogAdapter;
    private List<Clothing> mClothing;
    private String mCategory;

    private ClothingRepositoryActions mCatalogRepository;

    public ClothingCategoryFragment() {
        // Required empty public constructor
    }

    public static ClothingCategoryFragment newInstance(String category) {
        ClothingCategoryFragment clothingCategoryFragment =
                new ClothingCategoryFragment();
        Bundle args = new Bundle();
        args.putString(CATEGORY_FRAGMENT_ARGUMENT_KEY, category);
        clothingCategoryFragment.setArguments(args);
        return clothingCategoryFragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View rootView = inflater.inflate(R.layout.fragment_clothing_category,
                container, false);
        ButterKnife.bind(this, rootView);

        setAdapter();

        mCatalogRepository = new ClothingRepository();
        mCategory = getArguments().getString(CATEGORY_FRAGMENT_ARGUMENT_KEY, mCategory);
        loadClothing();

        mCatalogRefreshLayout.setColorSchemeResources(R.color.refresh_progress_1);
        mCatalogRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                loadClothing();
            }
        });

        return rootView;
    }

    // Irrelevent methods omitted
    ...

    public void setAdapter() {
        mClothing = new ArrayList<>();
        mCatalogRecyclerView.setHasFixedSize(true);
        mCatalogAdapter = new CatalogAdapter(getActivity(), mClothing);

        final GridLayoutManager layoutManager = new GridLayoutManager(getActivity(), 2);

        mCatalogRecyclerView.setLayoutManager(layoutManager);
        mCatalogRecyclerView.setAdapter(mCatalogAdapter);
    }

    public void loadClothing() {
        if (isNetworkAvailable()) {
            mCatalogRepository.loadClothing(mCategory);
        } else {
            mCatalogRepository.loadClothingFromRealm(mCategory);
        }
    }

    private boolean isNetworkAvailable() {
        ConnectivityManager connectivityManager
                = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }
}

Когда я переключаюсь между вкладками, в результатах запроса не происходит никаких изменений, а это означает, что loadClothing метод не вызывается. Я предполагаю, что фрагменты созданы и onCreateView вызывается только один раз для каждого фрагмента. Однако после обновления фрагмента с использованием макета обновления отображаются правильные результаты, означающие, что для запроса была использована правильная строка категории. Мой вопрос, как я могу получить фрагменты для вызова loadClothing с правильной строкой категории при переключении вкладок?

0 ответов

Другие вопросы по тегам