0

アプリに 1 つのアクティビティがあり、ABの 2 つのフラグメントがあります。MainActivityレイアウトには FrameLayout があります。MainActivityからFragmentManager を呼び出して、フラグメント A を FrameLayout に読み込みます。次に、フラグメント Aからフラグメント Bを FrameLayout に読み込みます。私のフラグメント Bでは、MainActivity からonBackPressed()と *onKeyDown(int _a, KeyEvent _b)* を実装して、フラグメント BのWebViewで戻るボタンを機能させます。

MainActivity インターフェイス:

public interface onKeyDownListener {
    public void onBackPressed();

    public boolean onKeyDown(int _a, KeyEvent _b);
}

フラグメント B の実装:

 public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
        mWebView.goBack();
        return true;
    }
    return getActivity().onKeyDown(keyCode, event);
}

public void onBackPressed() {

    if (mWebView.isFocused() && mWebView.canGoBack()) {
        mWebView.goBack();
    } else {
        Toast.makeText(getActivity().getApplicationContext(), "This's working!", 50000).show();
        getActivity().onBackPressed();
    }
}

これらの方法はどれも機能しません。戻るボタンはアプリケーションを閉じるだけです。

4

1 に答える 1

3

onBackPressed は、フラグメントではなくアクティビティの関数です。アクティビティでキャッチし、フラグメントに渡して処理する必要があります

于 2013-07-07T07:24:44.760 に答える