1

Я создаю приложение для 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(); 
    } 

} 

ответ

0

Просто позвоните

fragmentManager.popBackStack(stackName /* null if you did not supply a stack name while creating your fragments */, FragmentManager.POP_BACK_STACK_INCLUSIVE); 

внутри ActivityDashboard

+0

это дает ошибку 'expexted или)' 'между String, name' –

+0

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