При переходах между фрагментами внизу отображается текущий фрагмент (подсвечивается иконка). Но при нажатии кнопки "назад" и хождению по стеку, bottomnavigation почему-то не работает и застывает на последнем нажатом вручную элементе. Как это исправить?
public class MainActivity extends AppCompatActivity {
Fragment selectedFragment = new AFragment();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new AFragment()).commit();
}
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.nav_home:
selectedFragment = new AFragment();
break;
case R.id.nav_search:
selectedFragment = new BFragment();
break;
case R.id.nav_add:
startActivity(new Intent(getBaseContext(), CreateMeetActivity.class));
setBorderActive(v_3);
break;
case R.id.nav_notifications:
selectedFragment = new CFragment();
break;
case R.id.nav_profile:
selectedFragment = new DFragment();
break;
default:
break;
}
getSupportFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.fragment_container, selectedFragment).commit();
return true;
}
};
}
Кнопка "назад" ничего не знает о вашем BottomNavigationView.
Можно при нажатии кнопки "назад" определить индекс текущего меню, и перейти на предыдущее.
public class MainActivity extends AppCompatActivity {
...
//вынесем отдельно
BottomNavigationView navigation;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
...
navigation = (BottomNavigationView) findViewById(R.id.navigation);
...
}
...
@Override
public void onBackPressed() {
int selected=0;
//пробегаемся по всем меню
for(int i=0; i<navigation.getMenu().size(); i++){
//если элемент меню - текущий, то сохраняем и выходим из цикла
if (navigation.getMenu().getItem(i).getItemId()==navigation.getSelectedItemId()) {
selected=i;
break;
}
}
//если текущий элемент не первый
if (selected>0) {
//переходим на предыдущий элемент меню: selected-1
//setSelectedItemId имитирует нажатие на элементе меню
navigation.setSelectedItemId(navigation.getMenu().getItem(selected-1).getItemId());
} else {
//если текущий элемент - самый первый, то вызываем метод предка
super.onBackPressed();
}
}
}
Вам нужно переопределить нажатие кнопки назад. У себя вот так делал:
@Override
public void onBackPressed() {
int selectedItemId = bottomNavigationView.getSelectedItemId();
if (R.id.navigation_main != selectedItemId) {
loadFragment(mFirstFragment);
bottomNavigationView.setSelectedItemId(R.id.navigation_main);
} else {
super.onBackPressed();
}
}
Фрагменты переключал вот так:
private boolean loadFragment(Fragment fragment) {
if (fragment != null) {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.contentLayout, fragment)
.commit();
return true;
}
return false;
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
Fragment fragment = null;
if (bottomNavigationView.getSelectedItemId() != menuItem.getItemId()) {
switch (menuItem.getItemId()) {
case R.id.navigation_main:
fragment = mFirstFragment;
break;
case R.id.navigation_taxi:
fragment = new Pager_1();
break;
case R.id.navigation_bus:
fragment = new Pager_2();
break;
case R.id.navigation_train:
fragment = new TrainFrag();
break;
}
}
return loadFragment(fragment);
}
и в onCreate
if (savedInstanceState == null) {
loadFragment(mFirstFragment);
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Всем привет, хочу пройтись по странице и вытянуть текст с всех элементов в которых есть опредленный селектор
На сайте у каждой кнопки в меню выставлен цвет фонаПри нажатии на кнопку, цвет меняется и происходит переход на эту страницу
Подскажите, как могу перебить styledisplay родительского span-а? Есть такая разметка: