Android - PageView в новом BottomNavigationBar - предотвратить перезагрузку фрагментов

В моем StartActivity слушатель BottomNavigationBar имеет следующую настройку:

private GuideFragment guideFragment = new GuideFragment();
private MapFragment mapFragment = new MapFragment();
private MoreFragment moreFragment = new MoreFragment();

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
        = new BottomNavigationView.OnNavigationItemSelectedListener() {

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        Fragment selectedFragment = null;
        switch (item.getItemId()) {
            case R.id.navigation_guide:
                selectedFragment = guideFragment;
                break;
            case R.id.navigation_map:
                selectedFragment = mapFragment;
                break;
            case R.id.navigation_more:
                selectedFragment = moreFragment;
                break;
        }
        FragmentTransaction transaction = getFragmentManager().beginTransaction();
        transaction.replace(R.id.content, selectedFragment);
        transaction.commit();
        return true;
    }

};

Как я уже упоминал выше, я хочу, чтобы выбранные фрагменты всегда перезагружали источники / представление. Я попробовал кое-что как - во фрагментах:

if (rootView == null)
     inflater.inflate...

Но фрагменты по-прежнему воссоздают вид и загружают (в моем случае) новые веб-ресурсы.

Я прочитал что-то, что PageView может помочь, особенно

offScreenPageLimit

должен сделать магию.

Мой главный вопрос - где мне реализовать PageViewer - возможно ли это в моей программе StartActivity? Или я могу решить проблему другим способом?

1 ответ

Решение

Я сделал это, ребята! Нет необходимости в PageViewer.

Вот мое решение (все закодировано в StartActivity, а не во фрагментах):

private final GuideFragment guideFragment = new GuideFragment();
private final MapFragment mapFragment = new MapFragment();
private final MoreFragment moreFragment = new MoreFragment();
private final android.app.FragmentManager fm = getFragmentManager();
Fragment active = guideFragment;

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
        = new BottomNavigationView.OnNavigationItemSelectedListener() {

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.navigation_guide:
                if(active != guideFragment) {
                    fm.beginTransaction().show(guideFragment).commit();
                }
                else {
                    fm.beginTransaction().hide(active).show(guideFragment).commit();
                }
                active = guideFragment;
                break;
            case R.id.navigation_map:
                fm.beginTransaction().hide(active).show(mapFragment).commit();
                active = mapFragment;
                break;
            case R.id.navigation_more:
                fm.beginTransaction().hide(active).show(moreFragment).commit();
                active = moreFragment;
                break;
        }

        return true;
    }

};

и в списке onCreate транзакция фиксируется. fm.beginTransaction().add(R.id.content,moreFragment).commit(); fm.beginTransaction().add(R.id.content, mapFragment).commit(); fm.beginTransaction().add(R.id.content, guideFragment).commit();

Очень важно зафиксировать первый фрагмент вкладки последним (fragm3,fragm2,fragm1), если у вас есть 3 вкладки.

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

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