簡體   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