Как обновить фрагмент при переключении между вкладками с помощью 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 с правильной строкой категории при переключении вкладок?