Android - WebView 为空白

Android - WebView is Blank

这是我第一次使用 WebView 小部件,我已经通过 Google 和 StackExchange 进行了搜索,但找不到解决我的问题的方法。

我在 FragmentActivity 上放置了一个 WebView,由 main Activity 加载,无论我使用“http://www.google.com”作为 URL 或者如果我指定一个本地 .html 文件(非常简单的文件包含几个段落,header 和 link)。下面没有显示,但我的 AndroidManifest.xml 有 INTERNET 权限(和 EXTERNAL_STORAGE)。

activity_main.xml:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:name="com.adamtcarlson.websiteviewer.MainActivityFragment"
    tools:context=".MainActivity"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">

    <FrameLayout
        android:id="@+id/frm_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

MainActivity.java:

import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;

    public class MainActivity extends FragmentActivity {

    /**
     * The Activity's tag.
     */
    private static final String Tag = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.v(Tag, "onCreate()");

        populateContentFragment(false);
    }

    private void populateContentFragment(boolean addToBackStack) {
        Log.v(Tag, "populateContentFragment()");

        Uri uri = Uri.parse("http://www.google.com/");
        //Uri uri = Uri.parse("file:///data/app/testpage.html");
        Fragment fragment = WebBrowserFragment.newInstance(uri);

        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction()
                .replace(R.id.frm_content, fragment);

        if (addToBackStack) {
            fragmentTransaction.addToBackStack(Tag);
        }

        fragmentTransaction.commit();
    }
}

fragment_webbrowser.xml:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:background="#AAAAAA">

    <WebView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/wbvBrowser">
    </WebView>

</RelativeLayout>

WebBrowserFragment.java:

import android.annotation.SuppressLint;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;

/**
 * A placeholder fragment containing a simple view.
 */
public class WebBrowserFragment extends Fragment {

    private WebView wbvBrowser = null;
    private String browserUri = null;

    /**
     * The Activity's tag.
     */
    private static final String Tag = "WebBrowserFragment";

    public WebBrowserFragment() {
        Bundle args = getArguments();

        if (args != null) {
            browserUri = args.getString("Uri");
        }
    }

    public static WebBrowserFragment newInstance(Uri uri) {
        Log.v(Tag, "newInstance(). Uri: " + uri.toString());

        WebBrowserFragment fragment;

        if (uri != null) {
            fragment = new WebBrowserFragment();

            Bundle args = new Bundle();
            args.putString("Uri", uri.toString());

            fragment.setArguments(args);
        }
        else {
            fragment = new WebBrowserFragment();
        }

        return fragment;
    }

    @SuppressLint("SetJavaScriptEnabled")
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        Log.v(Tag, "onCreateView()");

        View rootView = inflater.inflate(R.layout.fragment_webbrowser, container, false);

        wbvBrowser = (WebView) rootView.findViewById(R.id.wbvBrowser);

        wbvBrowser.getSettings().setJavaScriptEnabled(true);

        wbvBrowser.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
            }
        });

        wbvBrowser.loadUrl(browserUri);

        return rootView;
    }
}

我应该在片段中指出,我尝试注释掉 .setWebViewClient() 调用,但也没有任何作用。我从我的一本书中获得了原始代码,"Android Programming: The Big Nerd Ranch Guide." 我在 logcat 日志中看不到任何错误或看起来 out-of-place 的任何内容。我试过使用 API 10 和 19 通过模拟器查看应用程序。我也试过在我的 LG Ultimate 2 上安装 .apk,但都显示空白屏幕(我将背景更改为 Fragment 的 RelativeLayout变灰以确保显示 WebView。

非常感谢您的帮助。

wbvBrowser.loadUrl(browserUri);

browserUri 未设置

只需在行前添加browserUri = getArguments().getString("Uri");

browserUri = getArguments().getString("Uri");
wbvBrowser.loadUrl(browserUri);