У меня есть фрагмент, в который я вставляю макет вкладки с пейджером вида. Проблема в том, что мой адаптер не обновляет данные, когда я получаю данные с моего метода onSuccess с сервера. Он инициализируется до вызова моего метода onSuccess. Как я могу сказать моему адаптеру пересмотреть мои данные? Я пробовал notifyDataSetChanged()
, но это не работает.
Мой фрагмент
public class CinemaFragmentLandingPage extends BaseHomeFragment implements View.OnClickListener, TabLayout.OnTabSelectedListener, CinemasContract.View {
private CinemasContract.Presenter mPresenterCinemas;
private ViewPager mViewPager;
private TabLayout mTabLayout;
private CinemaFragmentTabAdapter mCinemaTabAdapter;
private List<CinemasModel> mDataCinemas;
public static CinemaFragmentLandingPage newInstance() {
return new CinemaFragmentLandingPage();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_cinema_landing, container, false);
mDataCinemas = new ArrayList<>();
mPresenterCinemas.getCinemas();
initViews(rootView);
return rootView;
}
private void initViews(View rootView) {
mTabLayout = rootView.findViewById(R.id.tab_layout);
mTabLayout.addTab(mTabLayout.newTab().setText(getResources().getString(R.string.cinemas)));
mTabLayout.addTab(mTabLayout.newTab().setText(getResources().getString(R.string.films)));
mViewPager = rootView.findViewById(R.id.pager);
mCinemaTabAdapter = new CinemaFragmentTabAdapter(this.getChildFragmentManager(), 2, mDataCinemas);
mViewPager.setAdapter(mCinemaTabAdapter);
mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout));
mTabLayout.setOnTabSelectedListener(this);
}
@Override
public void onClick(View view) {
}
@Override
public void onTabSelected(TabLayout.Tab tab) {
mViewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
@Override
public void setLoading(boolean isActive) {
mHomeActivity.setLoadingDialog(isActive);
}
@Override
public void showGetCinemasSuccess(List<CinemasModel> cinemasModels) {
setLoading(false);
mDataCinemas = cinemasModels;
mViewPager.getAdapter().notifyDataSetChanged();
mViewPager.getAdapter().getItemPosition(0);
}
@Override
public void showGetCinemasFail(int errorCode) {
setLoading(false);
}
@Override
public void setPresenter(CinemasContract.Presenter presenter) {
mPresenterCinemas = Preconditions.checkNotNull(presenter);
}
}
Мой адаптер
public class CinemaFragmentTabAdapter extends FragmentStatePagerAdapter {
private int mNumOfTabs;
private ArrayList<CinemasModel> mCinemasData;
public CinemaFragmentTabAdapter(FragmentManager fm, int numOfTabs, List<CinemasModel> cinemasData) {
super(fm);
this.mNumOfTabs = numOfTabs;
this.mCinemasData = new ArrayList<CinemasModel>();
this.mCinemasData.addAll(cinemasData);
}
@Override
public Fragment getItem(int position) {
Fragment tab = null;
Bundle cinemasBundle = new Bundle();
cinemasBundle.putParcelableArrayList("cinemas", this.mCinemasData);
switch (position) {
case 0:
tab = new CinemaFragment();
tab.setArguments(cinemasBundle);
break;
case 1:
tab = new FilmsFragment();
tab.setArguments(cinemasBundle);
break;
default:
break;
}
return tab;
}
@Override
public int getCount() {
return mNumOfTabs;
}
}
Любая помощь будет оценена.