java - 在 WebView 中加载上次查看的页面

标签 java android webview

我有一个加载特定 URL 的 WebView。如果用户从 Web View 导航到应用程序的另一个部分,或者如果他们离开应用程序,我希望 Web View 加载他们离开时所在的最后一个页面。在 iOS 中,我可以通过获取当前 URL 并将其保存到 NSUserDefaults 来完成此操作,但我不确定如何在 Android 上完成此操作。

这是我的代码。

public class MyKYFB extends Fragment {

    private WebView web;
    private ProgressBar progressBar;

    private String url;

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        View rootView = inflater.inflate(R.layout.fragment_my_kyfb, null);

        url = "https://my.kyfb.com";

        web = (WebView)rootView.findViewById(R.id.kyfb_web);
        progressBar = (ProgressBar)rootView.findViewById(R.id.prgPageLoading);

        web.getSettings().setDomStorageEnabled(true);
        web.getSettings().setJavaScriptEnabled(true);
        web.getSettings().setSupportZoom(true);
        web.getSettings().setBuiltInZoomControls(true);
        web.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
        web.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
        web.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);

        web.loadUrl(url);

        web.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView webView, int progress) {
                getActivity().setProgress(progress * 100);
                progressBar.setProgress(progress);
            }
        });

        web.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(web, url, favicon);
                progressBar.setVisibility(View.VISIBLE);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(web, url);
                progressBar.setProgress(0);
                progressBar.setVisibility(View.GONE);
            }

            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                Toast.makeText(getActivity(), description, Toast.LENGTH_SHORT).show();
            }

            public boolean shouldOverrideUrlLoading(WebView view, String url)
            {
                if(url.endsWith(".mp4") || url.endsWith(".3gp") || url.endsWith(".avi") || url.endsWith(".flv")){
                    Intent i = new Intent(Intent.ACTION_VIEW);
                    i.setData(Uri.parse(url));
                    startActivity(i); //warning no error handling will cause force close if no media player on phone.
                    return true;
                }

                view.loadUrl(url);
                return true;
            }
        });

        return rootView;
    }
}

最佳答案

如果您想在用户重新打开您的应用程序时打开相同的网址,您必须将其保存在某个地方。一个简单的方法是使用 SharePreferences :

当用户离开应用程序/WebView 时:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString(SP_LAST_WEBVIEW_URL), getString(yourWebView.getUrl());
editor.commit();

将其放在当前类(class)的开头:private static final String SP_LAST_WEBVIEW_URL = "com.app.yourapp.LASTWEBVIEWURL";

加载已保存的网址:将 web.loadUrl(url); 替换为:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
String savedUrl = getResources().getString(SP_LAST_WEBVIEW_URL);
web.loadUrl(savedUrl);

关于java - 在 WebView 中加载上次查看的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27446125/

相关文章:

eclipse - Java在win7上很慢

java - 使用多种产品创建 Paypal 立即购买按钮(java sdk)

Java i++操作说明

android - 更改 View 在 recyclerview 的所有项目中的可见性

java - webView.ontouch和button.onclick之间的冲突

javascript - 在状态更改时 react native WebView 重新加载

mac/linux 上摩托罗拉 RFid 阅读器型号 FX7400 的 java 编码

android - Android 中带有 JSON 的 ExpandableListView - 列表错误

android - 如何访问给定内容 URI 的目录中的文件?

objective-c - cocoa WebView : can I load web and local resources together in the same page?