【问题标题】:How to control navigation history in webview inside fragment如何在片段内的 webview 中控制导航历史记录
【发布时间】:2014-01-23 10:24:29
【问题描述】:

我在 Fragment 中有一个 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;
    }

    ...

}

【问题讨论】:

    标签: android webview fragment state


    【解决方案1】:

    你可以试试

    @Override
    public void onBackPressed() {
        if (mWebView.canGoBack()) {
            mWebView.goBack();
            return;
        }
    
        // Otherwise defer to system default behavior.
        super.onBackPressed();
    }
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

        您需要管理的链接列表已加载到您的 web 视图中。 你可以得到这样的网址

            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,然后获取 url 表单列表并将其加载到 webview 并从列表中删除。 您可以使用 Stack 来存储 url,因此您可以直接使用 pop() 和 push() 函数变得简单。如果喜欢 +1

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-01
          • 1970-01-01
          • 2014-05-27
          • 2014-06-10
          相关资源
          最近更新 更多