0

我有一个 XML 布局文件,它由一个 Activity 膨胀

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
>
<LinearLayout
      android:id="@+id/content2"
      android:background="@color/lighter_gray"
      android:layout_width="match_parent"
      android:orientation="horizontal"
      android:layout_height="match_parent" >

<fragment class="com.xyz.fragments.TabFragment"
          android:id="@+id/tabs"
  android:layout_weight="1"
  android:layout_width="0px"
  android:layout_height="match_parent"
  />
<FrameLayout
  android:id="@+id/fragment_holder"
  android:layout_weight="2"
  android:layout_width="0px"
  android:layout_height="match_parent" />

  </LinearLayout>
</RelativeLayout>

Activity 是 FragmentActivity(来自 v4 库)的子类(不是直接的)。

现在,在 com.xyz.fragments.TabFragment 中,我有以下类声明

....
import android.support.v4.app.FragmentTransaction;
import roboguice.fragment.RoboListFragment;

public class TabFragment extends RoboListFragment {

.... 
....

运行时,应用程序崩溃,adb logcat 显示如下错误:

java.lang.RuntimeException: Unable to start activity     ComponentInfo{com.xyz/com.xyz.xxActivity}: android.view.InflateException: Binary XML file line #22: Error inflating class fragment

所以第 22 行正是 xml 布局中的这一行

fragment class="com.xyz.fragments.TabFragment"

它带有红色下划线......它说 TabFragment 不能分配给 android.app.fragment

好吧,我明白了,我正在使用来自支持库 v4 的 roboguice 的 FragmentList,与 android.app.fragment 不同

所以……我该怎么办?我假设这就是应用程序崩溃的原因。

下面的完整堆栈跟踪

0-25 20:59:54.535:INFO/ApplicationPolicy(1903):isApplicationInstallationEnabled:pkg com.xyz 10-25 20:59:55.455:INFO/PackageManager(1903):删除非系统包:com.xyz 10-25 20:59:55.455:INFO/ActivityManager(1903):强制停止包 com.xyz uid=10017 10-25 20:59:55.610:INFO/PackageManager(1903):ICS_DEBUG scanPackageLI 进入 com.xyz 10-25 20:59 :55.610:INFO/PackageManager(1903):ICS_DEBUG 检查 com.xyz 10-25 20:59:55.615:INFO/PackageManager(1903):在 com.xyz 10-25 20:59:58.390 上运行 dexopt:INFO/ ActivityManager(1903): 强制停止包 com.xyz uid=10017 10-25 20:59:59.305: DEBUG/PackageManager(1903): 新包安装在 /data/app/com.xyz-2.apk 10-25 20 :59:59.705:INFO / ActivityManager(1903):强制停止包com.xyz uid = 10017 10-25 20:59:59.875:DEBUG / Launcher.LauncherModel(2152):->包:com。xyz 10-25 21:00:00.050: INFO/SocialHub(6289): [UinboxReceiver] onReceive() >> intent.getData(): com.xyz 10-25 21:00:00.345: DEBUG/Launcher.LauncherModel(2152 ): --> 更新包 com.xyz 10-25 21:00:00.345: DEBUG/Launcher.LauncherModel(2152): --> 包:com.xyz 10-25 21:00:00.640: INFO/DebugDb(2152 ): 更新应用信息 -1 com.sec.android.app.twlauncher.ApplicationInfo xyz -1 4 15 75|-1|-1|-1|-1|0 com.sec.android.app.twlauncher.ApplicationInfo@ 421323f0 10-25 21:00:01.675:INFO/ActivityManager(1903):从 PID 7524 10-25 21:00:01.775 开始 {flg=0x10000000 cmp=com.xyz/.TabActivity}:INFO/ActivityManager(1903):为活动 com.xyz/.TabActivity 启动 proc com.xyz:pid=7536 uid=10017 gids={3003} java.lang.RuntimeException:无法启动活动 ComponentInfo{com.xyz/com.xyz.TabActivity}:android。视图.InflateException:二进制 XML 文件第 22 行:在 com.xyz.TabActivity.onCreate(TabActivity.java:25) 10-25 21:00:24.225:INFO/ActivityManager(1903):处理 com.xyz (pid 7536) 时出错已经死了。

4

2 回答 2

1

nameclass这样使用:

<fragment android:name="com.cyz.fragments.TabFragment"
        android:id="@+id/fragment_tab"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent" />

确保片段附加到的活动扩展RoboFragmentActivity

确保覆盖片段中的 onCreateView

public static class ExampleFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.example_fragment, container, false);
    }
}

还要确保在尝试执行其他任何操作之前调用super.onCreate(savedInstanceState);Activity 。onCreate()

于 2012-10-26T03:49:03.160 回答
0

我不确定,但我在所有片段中都调用了超级类,这对我有用。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    return inflater.inflate(R.layout.my_fragment, container, false);
}

检查这是否有效。

于 2012-10-26T18:38:45.300 回答