繁体   English   中英

如何在屏幕旋转的Webview片段内重新加载URL?

[英]How can I reload a URL inside a Webview Fragment on screen rotate?

我在片段内有以下webView 我的大问题是,指定的URL将在屏幕旋转时加载,而不是通过点击实现的实际URL。 “ onConfigurationChanged”方法将不起作用。

有没有办法重新加载屏幕旋转上的实际URL?

public class IndikatorenFragment extends Fragment {

public WebView webView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.content_fragment, container, false);

    // getActivity() will hand over the context to the method
    // if you call this inside an activity, simply replace getActivity() by "this"
    if(!isConnected(getActivity())) buildDialog(getActivity()).show();
    webView = (WebView) v.findViewById(R.id.webPage);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl("file:///android_asset/indikatoren.html");
    webView.setVisibility(View.GONE);
    webView.setVisibility(View.VISIBLE);
    webView.setWebViewClient(new WebViewClient() {
        public boolean shouldOverrideUrlLoading(WebView viewx, String urlx) {
            viewx.loadUrl(urlx);
            return false;
        }
    });
    webView.getSettings().setGeolocationEnabled(true);
    webView.setOnKeyListener(new View.OnKeyListener() {
        // allows going back in the web view by pressing return button
        @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;
        }
    });
    webView.setWebChromeClient(new WebChromeClient() {
        @Override
        // Allow Geolocation
        public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
            callback.invoke(origin, true, false);
        }
    });
    return v;
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
}

public boolean isConnected(Context context) {

    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netinfo = cm.getActiveNetworkInfo();

    if (netinfo != null && netinfo.isConnectedOrConnecting()) {
        NetworkInfo wifi = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        NetworkInfo mobile = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

        if ((mobile != null && mobile.isConnectedOrConnecting()) || (wifi != null && wifi.isConnectedOrConnecting()))
            return true;
        else return false;
    } else return false;
}

public AlertDialog.Builder buildDialog(Context c) {

    AlertDialog.Builder builder = new AlertDialog.Builder(c);
    builder.setTitle("Es besteht keine Internet Verbindung");
    builder.setMessage("Bitte stellen sie eine Verbindung zum Internet her, da die Rasterkarten eine intakte Verbindung benötigen.");

    builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {

            dialog.dismiss();
        }
    });

    return builder;
}
}

非常感谢您的帮助!

您可以将Webview的当前URL保存在onSaveInstanceState() ,并在娱乐时加载它:

public class IndikatorenFragment extends Fragment {

    public WebView webView;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        ...

        webView.loadUrl(savedInstanceState != null ? savedInstanceState.getString("url") : "file:///android_asset/indikatoren.html");

        ...
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        outState.putString("url", webView.getUrl());
        super.onSaveInstanceState(outState);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM