【问题标题】:Go back in webview by pressing "back button"按“后退按钮”返回 webview
【发布时间】:2016-04-20 19:48:30
【问题描述】:

如何在 webview 中返回一页?例如:我在我的应用程序中进行活动并在 webview 中浏览页面,但是一旦我按下返回按钮,它将退出应用程序或者只是返回活动而不是页面..

我已经完成了我的研究,但覆盖 onBackPressed 函数不起作用。

@Override
public void onBackPressed() {
    if (myWebView.canGoBack()) {
        myWebView.goBack();
    } else {
        super.onBackPressed();
    }
}

整个片段代码:

 public class FragmentTwo extends Fragment {


    public FragmentTwo() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


    }

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

    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState){

        WebView webView = (WebView) getActivity().findViewById(R.id.webView);

        WebSettings webSettings = webView.getSettings();
        webView.setScrollbarFadingEnabled(false);
        webSettings.setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient());
        webView.loadUrl("http://myapp.com");

    }


}

关于如何实现它的任何建议?

【问题讨论】:

    标签: android webview


    【解决方案1】:

    onBackPressed() 是 Activity 的方法,而不是 Fragment 的方法,因此永远不会调用此代码。如果您想在后按时做某事,您的父活动必须让您的片段知道它 - 您必须在父活动中实现onBackPressed(),并且在该方法中您应该调用片段的方法(或在事件总线上触发事件,或使用侦听器、回调等)。

    另外,正确的方法名称是 onCreateView(),而不是 onViewCreated() - 这个也不会被调用。

    【讨论】:

    • 它在 onViewCreated 因为 onCreateView WebView webView = (WebView) getActivity().findViewById(R.id.webView); 将是无法访问的语句。并且 webview 工作得很好
    • 请原谅?您不能随心所欲地命名方法并期望它们起作用。 will be unreachable statement 是什么意思?无论如何,片段必须实现onCreateView(),所以也许发布你的整个片段(或至少所有重要的方法)。
    • 如果我在 onCreateView 中使用WebView webView = (WebView) getActivity().findViewById(R.id.webView);,这将是无法访问的语句,但在 onCreateView 中一切正常。那是怎么回事?查看我的问题,发布所有代码
    • 你做错了。您的 webview 是您片段的一部分,因此您应该在 onCreateView(), not in parent activity. Activity's onBackPressed() 中创建的视图中寻找 R.id.webView 不应该直接与您的 webview 对话,而是与您的片段对话,而您的片段应该对话到 Web 视图。否则,如果它们没有解耦,那么将代码分解成更小的对象有什么意义。
    【解决方案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);
    
          webView = (WebView) view.findViewById(R.id.webView);
            webView.getSettings().setJavaScriptEnabled(true);
            webView.setWebViewClient(new MyWebViewClient());
            webView.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(yourname_Fragment.webView!=null){
                if (yourname_Fragment.webView.canGoBack()) {
                    yourname_Fragment.webView.goBack();
                }
    }
            }
    

    yourname_Fragmen.java= 这是你的 nameFragment,包含 Web 视图

    webView= 您的 WebView 的名称 (id)

    现在。在 Fragment 内部,您必须声明静态全局变量

    public static Webview webView;
    

    注意:如果您有多个片段,则必须检查此实例是否与 NULL 不同;

    就是这样!祝你好运!

    【讨论】:

    • 就像我说的,它是一个片段 onBackPressed() 不起作用
    • 我没看过!我改变了.. @StuckBetweenTrees 因为你可以用你的观点来参考你的 laout。我已经修改过了!可以试试吗?
    • 不要;真的不明白你在这里做了什么......“把它放在你的 mainActivity 或 Fragment 中”也不起作用或
    • 真的!吸!工作结束后,我将创建一个项目,我会尝试......如果找到解决方案,我会告诉你..
    • 我的意思是我很可能在这里是菜鸟..但我的主要活动有 3 个片段,您可以在其中左右滑动它们。在其中一个片段中,我有 webview 和我在问题中附加的片段代码..我似乎可以让它工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多