You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Fragment内WebView无法正常工作求助

Fixing WebView Issues in Your Fragment

Hey there, let's figure out why your Fragment's WebView isn't running properly. Looking at your code snippet, there are a few common misses and configuration issues that are likely causing the problem. Let's go through them step by step:

1. Don't Forget the Internet Permission

First off, make sure you've added the required internet permission in your AndroidManifest.xml—this is a super easy one to overlook:

<uses-permission android:name="android.permission.INTERNET" />

Without this, your app can't access any web content at all.

2. Fix the Configuration Order

You're calling loadUrl() before enabling JavaScript, which means the initial page load won't have JS enabled. Always configure your WebSettings before loading the URL:

// Enable Javascript FIRST
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);

// Then load the URL
mWebView.loadUrl("https://google.com");

Your code has a comment about forcing links to open, but you didn't finish implementing it. By default, WebView will launch the system browser for links/redirects instead of loading them in your app. Fix this by setting a WebViewClient:

mWebView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // Load all links in the current WebView
        view.loadUrl(url);
        return true;
    }

    // Optional: Add error handling to debug issues
    @Override
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        // Log or show an error message here to troubleshoot
        Log.e("WebViewError", "Error: " + description + " | URL: " + failingUrl);
    }
});

4. Fix Mixed Content (For Android 5.0+)

If the website you're loading includes both HTTPS and HTTP resources (even Google might have some in rare cases), Android 5.0+ blocks mixed content by default. Add this to your WebSettings to allow it (or use the appropriate mode for your use case):

webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);

5. Troubleshoot Hardware Acceleration Issues

Some devices have problems with WebView's hardware acceleration, leading to white screens or crashes. You can try disabling it for the WebView specifically:

mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

Or disable it for the entire Activity in AndroidManifest.xml if needed:

<activity android:name=".YourActivity" android:hardwareAccelerated="false">

Full Corrected Code Snippet

Here's how your onCreateView should look with all these fixes:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_one, container, false);
    mWebView = (WebView) view.findViewById(R.id.webview);

    // Configure WebSettings first
    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);

    // Handle links and errors
    mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }

        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            Log.e("WebViewError", "Failed to load " + failingUrl + ": " + description);
        }
    });

    // Load the URL last
    mWebView.loadUrl("https://google.com");

    return view;
}

Give these changes a try—most likely one (or a combination) of these fixes will get your WebView running smoothly in the Fragment.

内容的提问来源于stack exchange,提问作者J.Tulloch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:37:10