2015-09-06 78 views
0

這是我第一次使用WebView小部件,並且已經通過Google和StackExchange進行搜索,無法找到解決我的問題的方法。Android - WebView是空白的

我已將WebView放置在FragmentActivity上,由主Activity加載,無論我使用「http://www.google.com」作爲URL還是指定本地.html文件(非常簡單,包含情侶段落,標題和鏈接)。它沒有在下面顯示,但我的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編程:大書呆子牧場指南」。我看不到任何錯誤或任何在logcat日誌上看起來不合適的地方。我已經嘗試使用API​​ 10和19通過模擬器查看應用程序。我也嘗試在我的LG Ultimate 2上安裝.apk,並且都顯示一個空白屏幕(我將背景改爲Fragment的RelativeLayout以灰色確保WebView顯示出來)。

非常感謝您的任何幫助。

回答

1
wbvBrowser.loadUrl(browserUri); 

browserUri未設置

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

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

哇。我不能相信我錯過了這一點。啊。 謝謝你,我很感激。 – clamum