В настоящее время я создаю функциональность для изменения Fragments
с помощью нижней навигации. Но вместо того, чтобы уничтожать их и создавать заново, я хочу просто скрыть и показать фрагменты, чтобы сохранить переменные-члены.
Я пробовал replace()
, hide()
и show()
, но не справился с этим правильно, я получаю ошибки анимации, которые я не могу отследить.
Я также не могу найти пример переключения фрагментов внутри AppCompatActivity
.
public class MainActivity extends AppCompatActivity {
PassengerFragment passengerFragment;
DriverFragment driverFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BottomNavigationView bottomNav = findViewById(R.id.bottom_navigation);
bottomNav.setOnNavigationItemSelectedListener(navListener);
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new PassengerFragment()).commit();
}
// this handles the bottom navigation so when you click an item it changes fragment
private BottomNavigationView.OnNavigationItemSelectedListener navListener =
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
Fragment selectedFragment = null;
switch (menuItem.getItemId()) {
case R.id.nav_passenger:
selectedFragment = passengerFragment;
break;
case R.id.nav_driver:
if (driverFragment==null) {
selectedFragment = new DriverFragment();
}
else {
selectedFragment = driverFragment;
}
break;
}
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
selectedFragment).commit(); <---- line 54
return true;
}
};
}
ERROR
Java.lang.NullPointerException: попытка вызвать виртуальный метод «java.lang.Class java.lang.Object.getClass ()» для ссылки на пустой объект
на android.support.v4.app.BackStackRecord.doAddOp (BackStackRecord.java:396)
на android.support.v4.app.BackStackRecord.replace (BackStackRecord.java:444)
на android.support.v4.app.BackStackRecord.replace (BackStackRecord.java:434)
at je.digital.kevin_pickmeup.MainActivity $ 1.onNavigationItemSelected (MainActivity.java:54)