Android WebView Fragment GoBack();

时间:2014-08-04 23:13:30

标签: android webview fragment

这是我的webview抽屉应用.. 它让我发疯,我无法理解如何在普通的WebView中插入“goBack”功能。这是我的代码:

package com.my.app;

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;




public class WebViewFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        // Retrieving the currently selected item number
        int position = getArguments().getInt("position");

        String url = getArguments().getString("url");

        // List of rivers
        String[] menus = getResources().getStringArray(R.array.menus);

        // Creating view corresponding to the fragment
        View v = inflater.inflate(R.layout.fragment_layout, container, false);

        // Updating the action bar title
        getActivity().getActionBar().setTitle(menus[position]);

        //Initializing and loading url in webview
        WebView webView = (WebView)v.findViewById(R.id.webView);        
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl(url);
        webView.setWebViewClient(new WebViewClient());

        return v;

    }
}

我已经在Stack上检查过20多个答案,但没有结果。

希望有人能解释一下如何使用GoBack功能并帮助我解决这个压力的事情。

提前致谢, 的Davide

2 个答案:

答案 0 :(得分:2)

您的OnCreateView内部:

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        view = inflater.inflate(R.layout.your_layout, container, false);

      mWebView = (WebView) view.findViewById(R.id.webView);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.setWebViewClient(new MyWebViewClient());
        mWebView.loadUrl(expertsUrl);

        return view;
    }


private class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }

确定!在您的MainActivity中,您将编写它:

     @Override
        public void onBackPressed() {
if (WebViewFragment.mWebView!=null) {
            if (WebViewFragment.mWebView.canGoBack()) {
                WebViewFragment.mWebView.goBack();
            }
}
        }

WebViewFragment =这是您对Webview内容的nameFragment

mWebView = WebView(id)的名称

现在。在Fragment中你必须声明静态全局变量

public static Webview mWebView;

就是这样!祝你好运!

答案 1 :(得分:1)

由于您使用的是片段,因此必须覆盖onbackpressed()方法的活动,然后测试以查看您正在使用的片段。如果您在用户尝试返回时使用带有webview的片段,请查看webview是否可以返回。代码看起来像这样。

  @override
  public void onBackPressed()
  {
     //get a reference to your webviewfragment before this line
     //perhaps find the fragment by tag

     if(webviewFragment.isVisible()) 
        {


               WebView mWebView = webviewFragment.getWebView(); 

                  if(mWebView.canGoBack())
                   {
                        mWebView.goBack();
                        return; 
                   } 
        }

        super.onBackPressed();

       }
像这样的东西,不完全像它但是很接近。