Android中的Inflating Fragment异常



我正在创建一个菜单和详细导航活动。其中将有两个片段,即一个用于显示菜单,一个用于显示细节。为了显示菜单,我使用ListView,详细信息我使用TextView

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: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="com.example.hsports.practicefragments.MainActivity"
    android:orientation="horizontal"
    >
    <fragment
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:id="@+id/menuItems"
        android:name="com.example.hsports.practicefragments.menuItemsclass"
        class="com.example.hsports.practicefragments.menuItemsclass"
        />
    <fragment
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:id="@+id/details"
        android:name="com.example.hsports.practicefragments.detailsclass"
        class="com.example.hsports.practicefragments.detailsclass"
        />
</LinearLayout>

MainActivity.java

package com.example.hsports.practicefragments;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
public class MainActivity extends FragmentActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

displaymenu.xml

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

displaydetails.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/Osname"
        />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/Osversion"
        />
</LinearLayout>

detailclass.java

package com.example.hsports.practicefragments;
import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
/**
 * Created by I324671 on 9/28/2016.
 */
public class detailsclass extends Fragment {
    TextView tv1;
    TextView tv2;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v=inflater.inflate(R.layout.displaydetails,container,false);
        tv1=(TextView)getActivity().findViewById(R.id.Osname);
        tv2=(TextView)getActivity().findViewById(R.id.Osversion);
        return v;
    }
    public void change(String osname,String version)
    {
        tv1.setText(osname);
        tv1.setText(version);
    }
}

menuItemsclass.java

package com.example.hsports.practicefragments;
import android.app.Fragment;
import android.app.ListFragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
/**
 * Created by I324671 on 9/28/2016.
 */
public class menuItemsclass extends ListFragment {
ListView lv;
    String androidOs[]={"IOS","Marshmallow","Gingerbread","OxygenOs","BADA"};
    String versionOs[]={"1","2","3","4","5"};
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.displaymenu,container);
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,androidOs);
        setListAdapter(adapter);
        return view;
    }
    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        detailsclass obj=(detailsclass)getFragmentManager().findFragmentById(R.id.details);
        obj.change(androidOs[position],versionOs[position]);
    }
}
我得到的错误是:
FATAL EXCEPTION: main
Process: com.example.hsports.practicefragments, PID: 3014
 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hsports.practicefragments/com.example.hsports.practicefragments.MainActivity}: android.view.InflateException: Binary XML file line #15: Binary XML file line #15: Error inflating class fragment
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
     at android.app.ActivityThread.-wrap11(ActivityThread.java)
     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 #15: Binary XML file line #15: 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 com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:393)
     at android.app.Activity.setContentView(Activity.java:2166)
     at com.example.hsports.practicefragments.MainActivity.onCreate(MainActivity.java:13)
     at android.app.Activity.performCreate(Activity.java:6237)
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
     at android.app.ActivityThread.-wrap11(ActivityThread.java) 
     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 #15: 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.inflate(LayoutInflater.java:515)
     at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
     at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:393) 
     at android.app.Activity.setContentView(Activity.java:2166) 
     at com.example.hsports.practicefragments.MainActivity.onCreate(MainActivity.java:13) 
     at android.app.Activity.performCreate(Activity.java:6237) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
     at android.app.ActivityThread.-wrap11(ActivityThread.java) 
     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: Content has view with id attribute 'android.R.id.list' that is not a ListView class
     at android.app.ListFragment.ensureList(ListFragment.java:402)
     at android.app.ListFragment.onViewCreated(ListFragment.java:203)
     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:954)
     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
     at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1228)
     at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2201)
     at android.app.FragmentController.onCreateView(FragmentController.java:98)
     at android.app.Activity.onCreateView(Activity.java:5546)
     at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:34)
     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.inflate(LayoutInflater.java:515) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
     at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:393) 
     at android.app.Activity.setContentView(Activity.java:2166) 
     at com.example.hsports.practicefragments.MainActivity.onCreate(MainActivity.java:13) 
     at android.app.Activity.performCreate(Activity.java:6237) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
     at android.app.ActivityThread.-wrap11(ActivityThread.java) 
     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) 

这里提到的问题:

原因:java.lang.RuntimeException: Content has view with idandroid.R.id属性"。list'不是ListView类

因此,在displaymenu.xml中,将id属性指定为:

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@android:id/list"
    >
</ListView>

最新更新