Xamarin.Android で開発している、画面遷移をフラグメントの入れ替えで実装しているアプリで、ActionBar の左上に←(戻る)ボタンを表示できたので方法をメモしておく。
using System; using Android.App; using Android.OS; using Android.Support.V7.App; using Android.Views; namespace HelloAndroid { [Activity(Label = "@string/app_name", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true)] public class MainActivity : AppCompatActivity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); Xamarin.Essentials.Platform.Init(this, savedInstanceState); SetContentView(Resource.Layout.activity_main); var toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar); SetSupportActionBar(toolbar); if (savedInstanceState == null) { SupportFragmentManager.BeginTransaction() .Replace(Resource.Id.container, new FirstFragment()) .Commit(); } SupportFragmentManager.BackStackChanged += HandleBackStackChanged; } // BackStack が変わったタイミングで←ボタンの表示・非表示を切り替える void HandleBackStackChanged(object sender, EventArgs e) { var showUpButton = SupportFragmentManager.BackStackEntryCount > 0; SupportActionBar?.SetDisplayHomeAsUpEnabled(showUpButton); SupportActionBar?.SetHomeButtonEnabled(showUpButton); } public override bool OnOptionsItemSelected(IMenuItem item) { // ←ボタンがタップされたら BackStack をポップして 1 つ前の Fragment に戻る if (item.ItemId == Android.Resource.Id.Home) { SupportFragmentManager.PopBackStack(); return true; } return base.OnOptionsItemSelected(item); } } }
これで、←ボタンをタップすると1つ前の画面に戻るし、Android 端末の Home ボタンを押した場合も前の画面に戻る。 これ以上戻れないときは←ボタンを表示しない。