これは、一般的な方法でそれを処理するための優れた方法です。現在、すべてのフラグメントベースのアプリで使用しています。
まず、実装するフラグメントのインターフェースを作成します。これは、戻るキーを処理するかどうかを表します。そうでない場合は、インターフェースを実装しないでください。
public interface IHandleBackPressed {
boolean handleBackPressed(Activity ax);
}
onBackPressed
これは基本的に、アクティビティのメソッドのプロキシです。
次に、Activity.onBackPressed
このボイラープレートでメソッドをオーバーライドします。
@Override
public void onBackPressed() {
final Fragment fx = getFragmentManager().findFragmentById(R.id.content);
if(fx != null) {
if(fx instanceof IHandleBackPressed) {
final IHandleBackPressed ihbp = (IHandleBackPressed)fx;
if(ihbp.handleBackPressed(this)) {
// we handled it
return;
}
}
}
// onBackPressed unhandled by us
super.onBackPressed();
}
これは常に同じである可能性があります。複数のフラグメント エリアがある場合は、各フラグメント エリアに対してシーケンスを繰り返すだけです。super.onBackPressed
追加のロジックがある場合は、それをシステムに引き継ぐために呼び出す前または後に統合します (つまり、アクティビティを終了します)。
でできることのサンプルを次に示しFragment
ます。この例では を使用しWebView
、バック キーを使用して のバック スタックを管理しますWebView
。
public class BrowseUrlFragment extends Fragment implements IHandleBackPressed {
WebView wv;
public boolean handleBackPressed(Activity ax) {
if(wv != null && wv.canGoBack()) {
wv.postDelayed(goback, 150);
return true;
}
return false;
}
}