引起:android.view.InflateException:二进制 XML 文件第 11 行:错误膨胀类片段
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/20871116/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
提问by user2734182
I'm trying to build an app with fragments, which are at the beginner level and I have no direct solid knowledge or experience in the subject.
我正在尝试使用片段构建一个应用程序,这些片段处于初学者级别,并且我在该主题上没有直接的扎实知识或经验。
I want WebViewFragment be visible when the app starts, before later adding a ListView side.
我希望 WebViewFragment 在应用程序启动时可见,然后再添加 ListView 端。
As it stands now, the app crashes as soon as I start it on the phone. I have paste the errorlog below.
就目前而言,只要我在手机上启动该应用程序就会崩溃。我已经粘贴了下面的错误日志。
ERROR
错误
01-01 18:14:24.223: E/AndroidRuntime(25050): FATAL EXCEPTION: main
01-01 18:14:24.223: E/AndroidRuntime(25050): Process: com.raj.fragment, PID: 25050
01-01 18:14:24.223: E/AndroidRuntime(25050): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.raj.fragment/com.raj.fragment.MainActivity}: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
01-01 18:14:24.223: E/AndroidRuntime(25050): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2198)
01-01 18:14:24.223: E/AndroidRuntime(25050): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2248)
01-01 18:14:24.223: E/AndroidRuntime(25050): at android.app.ActivityThread.access0(ActivityThread.java:138)
01-01 18:14:24.223: E/AndroidRuntime(25050): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199)
01-01 18:14:24.223: E/AndroidRuntime(25050): at android.os.Handler.dispatchMessage(Handler.java:102)
01-01 18:14:24.223: E/AndroidRuntime(25050): at android.os.Looper.loop(Looper.java:136)
01-01 18:14:24.223: E/AndroidRuntime(25050): at android.app.ActivityThread.main(ActivityThread.java:5050)
01-01 18:14:24.223: E/AndroidRuntime(25050): at java.lang.reflect.Method.invokeNative(Native Method)
01-01 18:14:24.223: E/AndroidRuntime(25050): at java.lang.reflect.Method.invoke(Method.java:515)
01-01 18:14:24.223: E/AndroidRuntime(25050): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1264)
01-01 18:14:24.223: E/AndroidRuntime(25050): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1080)
01-01 18:14:24.223: E/AndroidRuntime(25050): at dalvik.system.NativeStart.main(Native Method)
01-01 18:14:24.223: E/AndroidRuntime(25050): Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
01-01 18:14:24.223: E/AndroidRuntime(25050): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
01-01 18:14:24.223: E/AndroidRuntime(25050): at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
01-01 18:14:24.223: E/AndroidRuntime(25050): at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
01-01 18:14:24.223: E/AndroidRuntime(25050): at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
01-01 18:14:24.223: E/AndroidRuntime(25050): at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
01-01 18:14:24.223: E/AndroidRuntime(25050): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
01-01 18:14:24.223: E/AndroidRuntime(25050): at android.app.Activity.setContentView(Activity.java:1929)
01-01 18:14:24.223: E/AndroidRuntime(25050): at com.raj.fragment.MainActivity.onCreate(MainActivity.java:11)
01-01 18:14:24.223: E/AndroidRuntime(25050): at android.app.Activity.performCreate(Activity.java:5231)
01-01 18:14:24.223: E/AndroidRuntime(25050): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
01-01 18:14:24.223: E/AndroidRuntime(25050): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)
01-01 18:14:24.223: E/AndroidRuntime(25050): ... 11 more
01-01 18:14:24.223: E/AndroidRuntime(25050): Caused by: android.app.Fragment$InstantiationException: Trying to instantiate a class com.raj.fragment.WebViewFragment that is not a Fragment
01-01 18:14:24.223: E/AndroidRuntime(25050): at android.app.Fragment.instantiate(Fragment.java:585)
01-01 18:14:24.223: E/AndroidRuntime(25050): at android.app.Fragment.instantiate(Fragment.java:561)
01-01 18:14:24.223: E/AndroidRuntime(25050): at android.app.Activity.onCreateView(Activity.java:4778)
01-01 18:14:24.223: E/AndroidRuntime(25050): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689)
01-01 18:14:24.223: E/AndroidRuntime(25050): ... 21 more
01-01 18:14:24.223: E/AndroidRuntime(25050): Caused by: java.lang.ClassCastException
01-01 18:14:24.223: E/AndroidRuntime(25050): ... 25 more
MainActivity
主要活动
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
public class MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
WebViewFragment
网页视图片段
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;
@SuppressLint("SetJavaScriptEnabled")
public class WebViewFragment extends Fragment {
private WebView mWebView;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.webview, container, false);
mWebView = (WebView)view.findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("http://www.google.com/about/");
mWebView.setWebViewClient(new WebClient());
return view;
}
public class WebClient extends WebViewClient{
@Override
public boolean shouldOverrideUrlLoading(WebView webview, String url)
{
webview.loadUrl(url);
return true;
}
}
}
activity_main.xml
活动_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<fragment
android:name="com.raj.fragment.WebViewFragment"
android:id="@+id/webview"
android:layout_weight="1"
android:layout_height="match_parent"/>
</LinearLayout>
回答by Raghunandan
Trying to instantiate a class com.raj.fragment.WebViewFragment that is not a Fragment
The log says it all
日志说明了一切
Change to
改成
public class WebViewFragment extends Fragment {
Because you have
因为你有
<fragment android:name="com.raj.fragment.WebViewFragment" // is a fragment
Your Fragment
is hosted by the MainActivity
.
您Fragment
由MainActivity
.
Also you can have either class="com.raj.fragment.WebViewFragment"
or android:name="com.raj.fragment.WebViewFragment"
. No need to have both.
你也可以有class="com.raj.fragment.WebViewFragment"
或android:name="com.raj.fragment.WebViewFragment"
。没必要两者兼得。
Also add @Override annotation
还要添加@Override 注释
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Edit:
编辑:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);// missing
}
回答by hakanostrom
The WebViewFragment should not be a FragmentActivity. Since it is a fragment it should inherit Fragment.
WebViewFragment 不应是 FragmentActivity。由于它是一个片段,它应该继承片段。
public class WebViewFragment extends Fragment