ViewPager не обновляет добавленные фрагменты - PullRequest
0 голосов
/ 08 октября 2018

У меня проблема с обновлением ViewPager фрагментов.Нам нужно показать фрагменты с данными зарегистрированному пользователю, когда он не зарегистрирован, нам нужно показать фрагменты с сообщением для регистрации.Я использую этот метод, чтобы проверить его в 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);
}

Я вызываю этот метод в презентере со значением настройки из firebase auth, проверяя, существует ли пользователь:

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

И затемвызовите метод предъявителя в 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);
}

Я пытаюсь записать логический результат, и он возвращает именно то значение, которое должно быть, но адаптер пейджера не может обновить свой контент. Код 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());
}

}

1 Ответ

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

Используйте OnPageChangeListener из ViewPager класса и уведомите ваш текущий фрагмент оттуда с помощью интерфейса.

...