2013-07-07 60 views
0

我在我的應用程序中有一個活動,我有2個片段 - AB。在MainActivity佈局中有一個FrameLayout。從MainActivity我調用FragmentManager將片段A加載到FrameLayout中。然後,從片段A我加載片段B到FrameLayout中。 在我B片段我實現onBackPressed()和*的onkeydown(INT _a,_b的KeyEvent)*從MainActivity使後退按鈕的工作與片段B. 的WebView但它的工作原理,如果我沒不實施它!onBackPressed和onKeyDown不工作

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(); 
    } 
} 

這些方法沒有一個工作,返回鍵直接關閉應用程序。

回答

3

onBackPressed是活動上的函數,而不是片段。你必須在活動中捕捉它並將其傳遞給片段以處理

+0

你是什麼意思?我試圖@Override它,但它並沒有工作。 –

+1

片段沒有onBackPressed功能。所以這就是爲什麼它沒有被調用。活動有他們,而不是碎片。 @Override不工作應該告訴你,碎片沒有一個名爲的函數,所以它不會被調用。 –

+0

是的,我知道,但我從MainActivity實現這些功能。我應該以不同的方式去做嗎? –