如何在片段内的webview中控制导航历史记录

时间:2014-01-23 10:24:30

标签: android webview fragment state

我在片段内部有一个webview,每当我按下后退按钮时,我希望它由导航历史记录控制。

在我的情况下,当我按下后退按钮时,我会离开webview,但是我希望在按下按钮时我会返回到存储在导航历史记录中的状态(从离开webview之前)。

有任何解决方案吗?

我尝试使用onKey,但它无法解决我的问题。这是我的代码:

public class FragmentAll extends Fragment implements
        DialogInterface.OnCancelListener, DialogInterface.OnDismissListener,
        OnDownloaExpodTerminated {

    public static Fragment newInstance(Context context) {
        FragmentAll f = new FragmentAll();
        return f;
    }

    private WebView myWebView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        (((MainActivity) getActivity()) ).setActionBarTitle("Store");
        myWebView = (WebView) v.findViewById(R.id.webView1);
        setWebview();
        v.setOnKeyListener(new OnKeyListener() {
            @Override
            public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
                // TODO Auto-generated method stub
                if (arg1 == KeyEvent.KEYCODE_BACK && myWebView.canGoBack()) {
                    myWebView.goBack();
                    return true;
                }
                return false;
            }
        });
        return v;
    }

    ...

}

3 个答案:

答案 0 :(得分:1)

你可以尝试一下

@Override
public void onBackPressed() {
    if (mWebView.canGoBack()) {
        mWebView.goBack();
        return;
    }

    // Otherwise defer to system default behavior.
    super.onBackPressed();
}

答案 1 :(得分:0)

您必须在Fragment类中创建一个方法:

public void goBackWebview(){
    myWebview.goBack();
}

现在,转到附加此片段的Activity类并覆盖onBackPressed():

@Override
public void onBackPressed() {
    //if webview has history
    myFragment.goBackWebView();
}

答案 2 :(得分:0)

您需要管理您的网页浏览中加载的链接列表。 你可以得到像这样的网址

    web_des2.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                if (event.getAction() == MotionEvent.ACTION_UP) {
                    HitTestResult hitTestResult = web_des2.getHitTestResult();

                    if (hitTestResult != null) {
                        String url = hitTestResult.getExtra();

                        if (url != null && url.startsWith("http://")) {
                                             yourUrlList.add(url);
                                             web_des2.loadUrl(url);
                        }

                    }
                    return true;
                }

                return false;
            }
        });

如果您的列表没有清空,您可以检查onBackPress然后获取网址表单并将其加载到webview并从列表中删除。 你可以使用Stack来存储url,这样就可以直接使用pop()和push()函数了。如果喜欢+1