android - 返回上一页 按一次返回键 Android WebView Fragment

标签 android android-fragments webview

我正在使用抽屉导航 Activity 并有 5 个 fragment ,每个 fragment 都使用 WebView 打开网页。在我只使用一个 MainActivity 之前,它只打开一个网站,并且能够轻松返回到上一个打开的页面,但现在我找不到任何可以让我执行此操作的东西。我当前在我的 fragment 中使用此代码,我使用该代码从 here 返回每当我打开一个 fragment 时,应用程序就会强制关闭。

package com.science.s11;

import android.app.Fragment;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.LinearLayout;
import android.widget.ProgressBar;

public class ask extends Fragment {

public WebView mWebView;

public ProgressBar progressBar;
public LinearLayout layoutProgress;

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

    View v = inflater.inflate(R.layout.ampproject, container, false);
    mWebView = (WebView) v.findViewById(R.id.aboutuswebViewask);
    progressBar = (ProgressBar) v.findViewById(R.id.progressBarask);
    layoutProgress = (LinearLayout) v.findViewById(R.id.layoutProgressask);
    mWebView.setVisibility(View.GONE);
    mWebView.setOnKeyListener(new View.OnKeyListener()
    {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event)
        {
            if(event.getAction() == KeyEvent.ACTION_DOWN)
            {
                WebView webView = (WebView) v;

                switch(keyCode)
                {
                    case KeyEvent.KEYCODE_BACK:
                        if(webView.canGoBack())
                        {
                            webView.goBack();
                            return true;
                        }
                        break;
                }
            }

            return false;
        }
    });
    mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
    WebSettings settings = mWebView.getSettings();
    settings.setSupportMultipleWindows(true);
    settings.setBuiltInZoomControls(false);
    settings.setSupportZoom(false);
    settings.setDisplayZoomControls(false);
    mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            mWebView.setVisibility(View.VISIBLE);
            layoutProgress.setVisibility(View.GONE);
            progressBar.setIndeterminate(true);
            super.onPageFinished(view, url);

        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            layoutProgress.setVisibility(View.VISIBLE);
            progressBar.setIndeterminate(false);
            super.onPageStarted(view, url, favicon);
        }


    });



    if (isOnline()) {
        mWebView.loadUrl("http://google.com");
    } else {
        mWebView.loadUrl("file:///android_asset/cti.html");
    }
    return v;
}

public boolean isOnline() {
    ConnectivityManager cm = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    return (netInfo != null && netInfo.isConnected());
}}

你们能帮帮我吗?

最佳答案

试试这个,它简单而且效果很好。

在所有 5 个 fragment 中,将变量设置为 public static:

public static WebView mWebView;

在您的主要 Activity 中:

@Override
public void onBackPressed() {
    if (Fragment_1.mWebView!= null) {
        if (Fragment_1.mWebView.canGoBack()) {
            Fragment_1.mWebView.goBack();
        } else {
           // do when mWebView cant go back anymore
        }
    }
    if (Fragment_2.mWebView!= null){
        if (Fragment_2.mWebView.canGoBack()) {
            Fragment_2.mWebView.goBack();
        } else {
             // do when mWebView cant go back anymore
        }
    }
    if (Fragment_3.mWebView!= null){
        if (Fragment_3.mWebView.canGoBack()) {
            Fragment_3.mWebView.goBack();
        } else {
             // do when mWebView cant go back anymore
        }
    }
    if (Fragment_4.mWebView!= null){
        if (Fragment_4.mWebView.canGoBack()) {
            Fragment_4.mWebView.goBack();
        } else {
            // do when mWebView cant go back anymore
        }
    }
     //and so on......
}

关于android - 返回上一页 按一次返回键 Android WebView Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38474546/

相关文章:

java - 在 Java 代码中使用 libsvm 在移动设备中执行预测

android - 无法在android的webview中使用javascript播放音频

java - 嵌套库 aar 文件行为

ios - 加载webView并同时进行网络请求

javascript - JavaFX Web View :sending a String from javafx to js webview

java - 如何在 Java/Kotlin 中使用新的 StateRestorationPolicy?

android - 激活列表行和主 fragment 之间的绘图指示器

android - 在 SherlockFragment 中切换布局 XML

android - 如何从 WebViewClient 打开新浏览器?

android - Activity 销毁后 ImageView 上的图像丢失