我有一个 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) 时出错已经死了。