Я создаю приложение для Android, используя макет по умолчанию Drawer и Fragment для переключения с одного макета на другой.reset addToBackStack() on MainActivity
Последовательность раскладки как
Dashboard -> Settings -> Profile Settings
MailActivity.class
грузы main_activity.xml
, которые containes в frameLayout
содержат фрагмент
и приборную панель нагрузки ActivityDashboard фрагмента.
Теперь, когда я переключаюсь с Dashboard
на Settings
, а затем на Profile Settings
. onBackPress
работает отлично. Но после Profile Settings
я выбрал Dashboard
из навигационного ящика, чтобы вернуться на главный экран. Затем нажать клавишу возврата следует из стека
Dashboard -> Profile Settings -> Settings -> Dashboard
Код для навигации выдвижного ящика
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// calling the method displaySelectedScreen()
displaySelectedScreen(item.getItemId());
return true;
}
private void displaySelectedScreen(int itemId) {
// creating Fragment object
Fragment fragment = null;
// initializing fragment
switch (itemId) {
case R.id.nav_dashboard:
fragment = new ActivityDashboard();
break;
case R.id.nav_calendar:
fragment = new ActivityCalendar();
break;
case R.id.nav_history:
fragment = new ActivityHistory();
break;
case R.id.nav_about:
fragment = new ActivityAbout();
break;
case R.id.nav_settings:
fragment = new ActivitySettings();
break;
}
// replacing the fragment
if (fragment != null) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, fragment);
ft.addToBackStack(null);
ft.commit();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
}
Я использую тот же FragmentTransaction
код, чтобы перейти от одного фрагмента к другому в ActivityDashboard
, ActivitySettings
классы фрагментов.
Вопрос 1. Как очистить addBackToStack при загрузке ActivityDashboard, чтобы пользователь мог отключить приложение?
Q 2. Как вернуться к ActivityDashboard, когда макет изменен из навигационного ящика, в зависимости от того, какой фрагмент заменен?
т.е., когда пользователь находится на ActivitySettings
фрагменте и изменено на ActivityHistory
из панели навигации, а затем на backPress, пользователь должен быть отслежены следующие
ActivityHistory -> ActivityDashboard
вместо
ActivityHistory -> ActivitySettings -> ActivityDashboard
onBackPressed() метод на MainActivity.class is
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
это дает ошибку 'expexted или)' 'между String, name' –
Вы должны поставить свое имя стека в качестве первого параметра, или нулевое значение, если вы не поставить какой-либо когда вы показывали свои фрагменты. – HkBrc