Xamarin.Forms:[戻る]ボタンに対応するには?.NET TIPS

システムやデバイスが提供する[戻る]ボタンが押されたときに、前画面にきちんと遷移するようにするにはOnBackButtonPressedメソッドを使用する。

» 2016年11月09日 05時00分 公開
[山本康彦BluewaterSoft/Microsoft MVP for Windows Development]
「.NET TIPS」のインデックス

連載目次

対象:Visual Studio 2015以降


 Xamarin.Formsで画面遷移を実装するとき、システムが提供している[戻る]ボタンに対応しなければならない場合もある。その方法を解説する。

[戻る]ボタンに対応するには?

 対応が必要な場合(後述)は、Pageクラス(Xamarin.Forms名前空間)のOnBackButtonPressedメソッドをオーバーライドすればよい(次のコード)。

 ただし、メソッドの戻り値としてtrueを返すのを忘れてはいけない。falseを返してしまうと、アプリが[戻る]ボタンに反応しなかった(=アプリの最初の画面である)とシステムは判断して、スタート画面やホーム画面に戻されてしまう(OnBackButtonPressedメソッドをオーバーライドしなかった場合も同様)。

protected override bool OnBackButtonPressed()
{
  App.Current.MainPage = new MainPage();
  return true;
}

[戻る]ボタンで画面遷移する例(C#)
ここでは、AppクラスのインスタンスのMainPageプロパティにMainPageクラスのインスタンスをセットすることで画面遷移している(MainPageクラスはPageクラスを継承している)。OnBackButtonPressedメソッドの最後でtrueを返して、[戻る]ボタンのイベントに対処したことをシステムに通知している(falseを返すとスタート画面やホーム画面に切り替えられてしまう)。
なお、画面遷移をサポートしているNavigationPageクラスなどを利用している場合には、この対応は不要である。

[戻る]ボタンに対応する必要がある場合

 [戻る]ボタンとは、デバイスまたはOSが提供しているボタン(あるいはキー)のうち、前画面へ戻るためのものだ。AndroidとWindowsが備えている(次の画像)。iOSやデスクトップモードのWindowsには存在しないので、前画面に戻るためのUIはアプリでも提供することになる。

 前回で紹介したようにNavigationPageクラスを利用してモードレスな画面遷移をすれば、[戻る]ボタンへの対応も、前画面に戻るためのUIもXamarin.Formsが面倒を見てくれる。そうではなく、自前で画面遷移を行う場合には、前画面に戻るためのUIを用意するだけでなく、前述のようにOnBackButtonPressedメソッドをオーバーライドして[戻る]ボタンに対応する必要があるのだ。

[戻る]ボタン(Android)
[戻る]ボタン(モバイル版のWindows 10)
[戻る]ボタン(PC版のタブレットモードのWindows 10) [戻る]ボタン
上: Android中: Windows 10(モバイル版)
下: Windows 10(PC版のタブレットモード)
緑丸の部分に[戻る]ボタンがある。画面遷移するアプリは、システムが提供しているこの[戻る]ボタンに対応しなければならない。

まとめ

 画面遷移するアプリは、システムの[戻る]ボタン(キー)に対応する必要がある。NavigationPageクラスなどを利用している場合はXamarin.Formsが面倒を見てくれる。独自に画面遷移を実装する場合は、PageクラスのOnBackButtonPressedメソッドをオーバーライドする。

利用可能バージョン:Visual Studio 2015以降
カテゴリ:Xamarin 処理対象:Xamarin.Forms
関連TIPS:Xamarin.Forms:プロジェクトにXamlページを追加するには?
関連TIPS:Xamarin.Forms:画面遷移するには?


「.NET TIPS」のインデックス

.NET TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。