2016-12-21 4 views
0

У меня есть AppCompatActivity сФрагмент назад навигация

 Android.Support.V7.Widget.Toolbar myToolbar = (Android.Support.V7.Widget.Toolbar)FindViewById(Resource.Id.my_toolbar); 
     SetSupportActionBar(myToolbar); 
     SupportActionBar.SetDisplayHomeAsUpEnabled(true); 

Я использую фрагменты в этой деятельности, чтобы изменить то, что отображается в панели инструментов. Я хочу, чтобы каждый фрагмент (на SupportFragmentManager.BeginTransaction().Replace(Resource.Id.content, myFragment).Commit()) был нажат на стек, поэтому на панели инструментов нажмите кнопку «Назад» или нажмите кнопку «Назад назад», чтобы вернуться к предыдущему фрагменту. Как это сделать?

+0

Используйте BackStack. https://developer.xamarin.com/guides/android/platform_features/fragments/part_2_-_managing_fragments/ –

+0

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

+0

Поскольку вам нужно переопределить 'OnBackPressed()' в 'SetNavigationOnClickListener' для панели инструментов, и если' SupportFragmentManager.GetBackStackEntryCount() 'возвращает 0, вызовите' Finish', в противном случае один или несколько фрагментов в вызове BackStack 'Super' (Я не знаком с именем метода Xamarin, но это тот же подход ^^) – Fllo

ответ

0

Я решил, что, перекрывая OnOptionsItemSelected в моей деятельности:

public override bool OnOptionsItemSelected(IMenuItem item) 
    { 
     if (SupportFragmentManager.BackStackEntryCount == 0) 
     { 
      return base.OnOptionsItemSelected(item); 
     } 

     SupportFragmentManager.PopBackStack(); 
     return true; 
    } 

Примечание: Нет необходимости переопределить OnBackPressed.

0

использовать это:

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(containerId, fragment, fragment.getClass().getSimpleName()); 
    fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 

@Override 
public void onBackPressed() { //or use on menu item clicked 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    if (fragmentManager.getBackStackEntryCount() > 0) { 
     fragmentManager.popBackStack(); 
    }else { 
     super.onBackPressed(); 
    } 
} 
Смежные вопросы