android.view.InflateException:二进制XML文件行#12:二进制XML文件行#12:错误膨胀类片段

时间:2017-05-04 22:18:38

标签: java android xml android-layout

尝试运行此代码时出现此错误。目的是显示片段上的列表,当用户点击列表项时,我将显示详细信息,到目前为止,我仍然坚持在片段上显示列表。

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.pc.doggie, PID: 30331
                  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.pc.doggie/com.example.pc.doggie.MainActivity}: android.view.InflateException: Binary XML file line #12: Binary XML file line #12: Error inflating class fragment
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                      at android.app.ActivityThread.access$900(ActivityThread.java:150)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:148)
                      at android.app.ActivityThread.main(ActivityThread.java:5417)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                   Caused by: android.view.InflateException: Binary XML file line #12: Binary XML file line #12: Error inflating class fragment
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
                      at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:292)
                      at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
                      at com.example.pc.doggie.MainActivity.onCreate(MainActivity.java:11)
                      at android.app.Activity.performCreate(Activity.java:6294)
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                      at android.app.ActivityThread.access$900(ActivityThread.java:150) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:148) 
                      at android.app.ActivityThread.main(ActivityThread.java:5417) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                   Caused by: android.view.InflateException: Binary XML file line #12: Error inflating class fragment
                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:782)
                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
                      at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
                      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
                      at android.view.LayoutInflater.rInflate(LayoutInflater.java:838)
                      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
                      at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:292) 
                      at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
                      at com.example.pc.doggie.MainActivity.onCreate(MainActivity.java:11) 
                      at android.app.Activity.performCreate(Activity.java:6294) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                      at android.app.ActivityThread.access$900(ActivityThread.java:150) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:148) 
                      at android.app.ActivityThread.main(ActivityThread.java:5417) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                   Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
                      at android.support.v4.app.ListFragment.ensureList(ListFragment.java:346)
                      at android.support.v4.app.ListFragment.onViewCreated(ListFragment.java:147)
                      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1265)
                      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1472)
                      at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1691)
                      at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:3440)
                      at android.support.v4.app.FragmentController.onCreateView(FragmentController.java:120)
                      at android.support.v4.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:378)
                      at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:33)
                      at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:79)
                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:754)
                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
                      at android.view.LayoutInflater.rInflate(LayoutInflater.java:835) 
                      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 
                      at android.view.LayoutInflater.rInflate(LayoutInflater.java:838) 
                      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:515) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
                      at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:292) 
                      at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
                      at com.example.pc.doggie.MainActivity.onCreate(MainActivity.java:11) 
                      at android.app.Activity.performCreate(Activity.java:6294) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                      at android.app.ActivityThread.access$900(ActivityThread.java:150) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:148) 
                      at android.app.ActivityThread.main(ActivityThread.java:5417) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Main Acitivity.java

package com.example.pc.doggie;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

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

}

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <fragment
            android:layout_width="0dp"
            android:layout_height="match_parent"
            class="com.example.pc.doggie.List_Fragment"
            android:id="@+id/list_frag"
            android:layout_weight="2"
            tools:layout="@layout/list_fragment" />

        <fragment
            android:layout_width="0dp"
            android:layout_height="match_parent"
            class="com.example.pc.doggie.Details_Fragment"
            android:id="@+id/details_frag"
            android:layout_weight="5"
            tools:layout="@layout/details_fragment" />

    </LinearLayout>
</LinearLayout>

List_Fragment.java

package com.example.pc.doggie;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;

public class List_Fragment extends ListFragment {

    public List_Fragment() {
        // Required empty public constructor
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        setListAdapter(new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_list_item_1
                , getResources().getStringArray(R.array.names)));
    }

}

list_fragment.xml

<FrameLayout 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:background="@color/colorAccent">
</FrameLayout>

array.xml(字符串资源)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="breed">
        <item>Labrador</item>
        <item>Huskie</item>
        <item>Spaniel</item>
        <item>Golden Retriever</item>
    </string-array>

</resources>

1 个答案:

答案 0 :(得分:1)

更改此文件: list_fragment.xml

    <ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

您的Fragment从ListFragement扩展。这意味着您的片段布局必须具有ID为android.R.id.list的ListView(之前它只是一个FrameLayout),所以现在它变成了ListFragment。 Android需要调用函数,因此它需要listview上的正确id,默认情况下是android.R.id.list