安卓兼容性库错误

6
有人试过 Android 上的新兼容性库 demo 应用了吗?可以在这里找到。
我正在 API 11 上尝试 v4 构建,但是当我尝试在 Fragment Demo 中点击 Tabs 和 Pager 时,我一直收到以下错误:
e07-16 21:32:06.890: ERROR/AndroidRuntime(15315): java.lang.NoClassDefFoundError: com.example.android.supportv4.app.LoaderCustomSupport$AppListFragment 07-16 21:32:06.890: ERROR/AndroidRuntime(15315): at com.example.android.supportv4.app.FragmentTabs.onCreate(FragmentTabs.java:55) 07-16 21:32:06.890: ERROR/AndroidRuntime(15315): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072) 07-16 21:32:06.890: ERROR/AndroidRuntime(15315): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1785) 07-16 21:32:06.890: ERROR/AndroidRuntime(15315): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1842) 07-16 21:32:06.890: ERROR/AndroidRuntime(15315): at android.app.ActivityThread.access$1500(ActivityThread.java:132) 07-16 21:32:06.890: ERROR/AndroidRuntime(15315): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038) 07-16 21:32:06.890: ERROR/AndroidRuntime(15315): at android.os.Handler.dispatchMessage(Handler.java:99) 07-16 21:32:06.890: ERROR/AndroidRuntime(15315): at android.os.Looper.loop(Looper.java:143) 07-16 21:32:06.890: ERROR/AndroidRuntime(15315): at android.app.ActivityThread.main(ActivityThread.java:4263) 07-16 21:32:06.890: ERROR/AndroidRuntime(15315): at java.lang.reflect.Method.invokeNative(Native Method) 07-16 21:32:06.890: ERROR/AndroidRuntime(15315): at java.lang.reflect.Method.invoke(Method.java:507) 07-16 21:32:06.890: ERROR/AndroidRuntime(15315): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 07-16 21:32:06.890: ERROR/AndroidRuntime(15315): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 07-16 21:32:06.890: ERROR/AndroidRuntime(15315): at dalvik.system.NativeStart.main(Native Method)

有人能帮我解决这个问题吗?

2个回答

10

无法找到该类的原因是AppListFragment实现的某个接口(OnQuerytextListener)被定义在SearchView中,而SearchView只存在于Honeycomb(API 11+)及以上版本。

public static class AppListFragment extends ListFragment implements OnQueryTextListener, LoaderManager.LoaderCallbacks<List<AppEntry>>
{
我在兼容性jar中搜索了一遍,但找不到与SearchView相关的内容,因此我认为这只能在Honeycomb及更高版本上运行(编译目标低于Honeycomb会防止该程序的工作)。
同样的原因还有其他一些失败,例如Loader-> Throttle然后按菜单-缺少方法。
Compatibility Package页面:
警告:确保您不要混淆标准的android包与android.support库中的包。某些代码完成工具可能会出错,特别是如果您正在构建针对最近版本的平台。为安全起见,将构建目标设置为与android:minSdkVersion定义的版本相同,并仔细检查导入存在于支持库中的类的导入语句,例如SimpleCursorAdapter。
遵循他们自己的建议意味着整个项目无法编译 - 一半的示例类似乎依赖于高于API 4的东西。
我的答案是:一些示例是错误的,并且依赖于不存在的代码。希望Google能尽快更新它们以使其正常工作。
哦,是的,您可以通过从AppListFragment中删除OnQueryTextListener和方法来暂时使其工作,但稍后会出现不同的问题。

这是正确的答案... klemzy的只是一个丑陋的解决方法。 - Cristian
@Cristian:实用和理论解决方案。我喜欢stackoverflow.com :) - Macarse
1
这也在http://code.google.com/p/android/issues/detail?id=18594上进行了更详细的讨论,并且还概述了“修复”演示的其他步骤。 - dweebo
这真的不是一个解决方法。我仍然在Fragment/Tabs/Custom、Fragment/Tabs和Pager/Contacts、Fragment/Tabs和Pager/Custom、Fragment/Tabs和Pager/Throttle、Loader/Custom、Loader/Throttle上遇到异常。使用Android支持包rev.7。 - emeraldhieu
你可能遇到的问题是使用了Android支持包rev.7。这适用于原始版本,而且似乎已经有7个修订版本了 - 我不怀疑任何问题都是不同的。 - zeetoobiker

6

我通过在FragmentTab.onCreate和FragmentTabPager.onCreate中注释掉正确的行来解决了这个问题。

//mTabManager.addTab(mTabHost.newTabSpec("custom").setIndicator("Custom"),
//        LoaderCustomSupport.AppListFragment.class, null);

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