Android-完美解決在Activity中觸摸返回鍵onBackPressed不能觸發問題

場景:在一個只有WebView組件的Activity中如何正確處理頁面的返回?

之前思路是覆寫Activity的onBackPressed方法,因爲用戶觸摸“返回鍵“會觸發該方法;後來發現在三星,OPPO等機型手機上該方法並不執行,也就說該方法並不可取。

解決方法:通過覆寫dispatchKeyEvent方法,從該方法中攔截返回鍵,再做處理,這種方法測試後感覺兼容性不錯。

代碼如下:

public class WebViewDemoActivity extends Activity {

    private WebView mWebview;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mWebview = (WebView)findViewById(R.id.layout_webview);
        //init webview param
    }

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        //攔截返回鍵
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK){
            //判斷觸摸UP事件纔會進行返回事件處理
            if (event.getAction() == KeyEvent.ACTION_UP) {
                onBackPressed();
            }
            //只要是返回事件,直接返回true,表示消費掉
            return true;
        }
        return super.dispatchKeyEvent(event);
    }

    @Override
    public void onBackPressed() {
        if (mWebview != null) {
            //如果h5頁面可能返回,跳轉到上個頁面
            if (mWebview.canGoBack()) {
                mWebview.goBack();
            } else {
                //不能返回上個頁面,直接finish當前Activity
                finish();
            }
        } else {
            finish();
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章