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 вкладки.
Высокая скорость работы на смартфоне теперь, не загружая каждый новый фрагмент / обновление.