错误膨胀类片段(作为ListFragment)

3

在尝试创建选项卡中的ListFragment时,我遇到了以下错误。我只想在该片段中有一个列表,没有特别的需求...很抱歉这更多是知识上的不足而不是bug,但我已经被这个问题困扰了2天,不知道还能做什么除了向你们提问。谢谢。

07-07 13:08:18.693: E/AndroidRuntime(19662): FATAL EXCEPTION: main
07-07 13:08:18.693: E/AndroidRuntime(19662): java.lang.RuntimeException: Unable to start activity ComponentInfo{com..bucp/com..bucp.MainActivity}: android.view.InflateException: Binary XML file line #63: Error inflating class fragment
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.app.ActivityThread.access$600(ActivityThread.java:127)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.os.Looper.loop(Looper.java:137)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.app.ActivityThread.main(ActivityThread.java:4441)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at java.lang.reflect.Method.invokeNative(Native Method)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at java.lang.reflect.Method.invoke(Method.java:511)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at dalvik.system.NativeStart.main(Native Method)
07-07 13:08:18.693: E/AndroidRuntime(19662): Caused by: android.view.InflateException: Binary XML file line #63: Error inflating class fragment
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:742)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:742)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:742)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:742)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:255)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.app.Activity.setContentView(Activity.java:1835)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at com..bucp.MainActivity.onCreate(MainActivity.java:21)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.app.Activity.performCreate(Activity.java:4465)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931)
07-07 13:08:18.693: E/AndroidRuntime(19662):    ... 11 more
07-07 13:08:18.693: E/AndroidRuntime(19662): Caused by: java.lang.ClassCastException: com..bucp.BanlistFragment cannot be cast to android.app.Fragment
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.app.Fragment.instantiate(Fragment.java:574)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.app.Fragment.instantiate(Fragment.java:549)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.app.Activity.onCreateView(Activity.java:4235)
07-07 13:08:18.693: E/AndroidRuntime(19662):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:673)
07-07 13:08:18.693: E/AndroidRuntime(19662):    ... 25 more

给定的第63行是Fragment的标签:
<fragment        
android:name="com..bucp.BanlistFragment"
android:id="@+id/banl_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout="@layout/banlist_fragment" />

片段文件本身包含:

<?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"
         android:paddingLeft="8dp"
         android:paddingRight="8dp">

     <ListView android:id="@id/android:list"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:background="#00FF00"
               android:layout_weight="1"
               android:drawSelectorOnTop="false"/>

     <TextView android:id="@id/android:empty"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:background="#FF0000"
               android:text="No data"/>
</LinearLayout>

碎片类只包含

@Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  ListAdapter myListAdapter = new ArrayAdapter<String>(
    getActivity(),
    android.R.layout.simple_list_item_1,
    month);
  setListAdapter(myListAdapter);
 }

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
     View tmp_view = inflater.inflate(R.layout.banlist_fragment, container, false);
     ListView list = (ListView) tmp_view.findViewById(android.R.id.list);
  return list;
 }

请提供BanlistFragment完整文件(从第一行package com.fr34kyd3v.bucp开始)。 - Dheeresh Singh
2个回答

6

在堆栈跟踪中,您有:Caused by: java.lang.ClassCastException: com.fr34kyd3v.bucp.BanlistFragment cannot be cast to android.app.Fragment

我猜测,也许您的BanlistFragment类扩展了支持库(android.support.v4.app.Fragment)中的Fragment,而活动尝试“本地处理它”,而不是使用支持库? 要获取更多信息,请提供BanlistFragment的源代码。


1

点 -1

我认为应该像这样,BanlistFragment 应该扩展 Fragment。

  @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
         View tmp_view = inflater.inflate(R.layout.banlist_fragment, container, false);
         ListView list = (ListView) tmp_view.findViewById(android.R.id.list);
      return tmp_view; //<------------------------------
     }

第二点

根据宠物生命周期http://developer.android.com/images/activity_fragment_lifecycle.png,onCreate在onCreateView之前被调用

setListAdapter(myListAdapter);

应该在onCreateView中,或者在此之后调用该函数...


我的想法是扩展ListFragment以获取“setListAdapter”、“onListItemClick”和“getListView”...这些函数仅在该类中可用。ListFragment确实扩展了Fragment,所以我不明白为什么它不起作用。你关于返回值的说法是正确的,但错误仍然存在。 - Sven Mawby
请提供BanlistFragment完整文件(从com.fr34kyd3v.bucp包的第一行开始)。 - Dheeresh Singh
谢谢,但代码是正确的,确实是包含文件的问题。 - Sven Mawby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接