简体   繁体   中英

ViewPager doesn't update added fragments

I got a problem with updating ViewPager fragments. We need to show fragments with data to registered user, when he doesn't registered we need to show fragments with message to register. I use this method to check it in MainActivity :

@Override
public void setAdapter(boolean isUserExist) {
    Log.d("RegDebug", "In setAdapter");
    mainPagerAdapter.clearData();
    mainPagerAdapter.addFragment(searchFragment, getString(R.string.search_title));
    if (isUserExist) {
        Log.d("RegDebug", "In setAdapter reg");
        mainPagerAdapter.addFragment(new ChatsFragment(), getString(R.string.chats_title));
        mainPagerAdapter.addFragment(new ActionsFragment(), getString(R.string.actions_title));
        Toast.makeText(getApplicationContext(), "Registered!", Toast.LENGTH_SHORT).show();
    } else {
        Log.d("RegDebug", "In setAdapter unreg");
        mainPagerAdapter.addFragment(RegisterFragment.newInstance(Consts.CHATS_TAB_NAME), getString(R.string.chats_title));
        mainPagerAdapter.addFragment(RegisterFragment.newInstance(Consts.ACTIONS_TAB_NAME), getString(R.string.actions_title));
        Toast.makeText(getApplicationContext(), "Unregistered!!!", Toast.LENGTH_SHORT).show();
    }
    mainPagerAdapter.notifyDataSetChanged();

    viewPager.setAdapter(mainPagerAdapter);
}

I call this method in presenter with setting value from firebase auth, checking if user exists:

 public void checkForUserExist() {
    if (mainInteractor.isUserExist()) {
        getViewState().setRegAdapter();
    } else getViewState().setUnregAdapter();
}

And then call presenter method in onCreate of MainActivity:

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    dialogFragment = new FilterDialogFragment();
    searchFragment = new SearchFragment();

    //UI
    toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    viewPager = findViewById(R.id.main_view_pager);
    tabLayout = findViewById(R.id.main_tabs);

    //mainPagerAdapter = new MainPagerAdapter(getSupportFragmentManager());
    mainPresenter.checkForUserExist();

    tabLayout.setupWithViewPager(viewPager);
}

I try to log the boolean result and it returns exactly value that must be, but pager adapter can't update its content.Code of MainPagerAdapter :

public class MainPagerAdapter extends FragmentPagerAdapter{

private final List<Fragment> fragmentList = new ArrayList<>();
private final List<String> fragmentTitleList = new ArrayList<>();


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

@Override
public Fragment getItem(int position) {
    return fragmentList.get(position);

}

@Override
public int getCount() {
    return fragmentTitleList.size();
}


@Nullable
@Override
public CharSequence getPageTitle(int position) {

    return fragmentTitleList.get(position);
}

public void addFragment(Fragment fragment, String title){
    fragmentList.add(fragment);
    fragmentTitleList.add(title);
}

public void clearData(){
    fragmentList.clear();
    fragmentTitleList.clear();
    notifyDataSetChanged();
    Log.d("RegDebug", " fragmentList size is " + fragmentList.size()
            + " fragmentTitleList size is " + fragmentTitleList.size());
}

}

使用ViewPager类的OnPageChangeListener并使用界面从那里通知您当前的片段。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM