7

我正在运行来自实现有效导航的示例- EffectiveNavigation.zip - 它演示了一些在活动中带有选项卡的滑动视图。它在 4.2.2 (API17) 等较新的平台上运行良好。

然后我也想支持 2.3.3 (API10) 等旧平台,所以我将 minSdkVersion 降低到 4:

<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="17"/>

我确实通过以下方式之一包含支持库:

  1. 按书本:V4支持库设置 - 没有资源
  2. 或按书本:V7支持库设置 - 带有资源
  3. 或在项目中右键单击->Android 工具->添加支持库

无论如何,当我在 2.3.3 设备上运行该应用程序时,会发生这种模棱两可的运行时异常,如下面的清单所示。

在匆忙进入之前,请注意:我的问题是我无法在 2.3.3 等旧设备上运行它 - 但在 4.2.2 等新设备上运行良好。

我在各种模拟器上使用各种更改设置删除、重新导入、重建和重新运行。它只是不能在旧设备上运行(我的目的是在旧设备中使用标签和滑动视图)。

 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.android.effectivenavigation/com.example.android.effectivenavigation.MainActivity}: java.lang.ClassNotFoundException: com.example.android.effectivenavigation.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.example.android.effectivenavigation-1.apk]
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:130)
    at android.app.ActivityThread.main(ActivityThread.java:3683)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.ClassNotFoundException: com.example.android.effectivenavigation.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.example.android.effectivenavigation-1.apk]
    at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
4

2 回答 2

13

终于解决了,浪费了一天一夜!

大部分问题是该应用程序还实现了一个 ActionBar,这需要更多的迁移工作。我不得不更改其他一些位以使用支持库(v4 和 v7),主要是:

Java 文件中的代码更改:

<< import android.app.ActionBar;
<< import android.app.FragmentTransaction;
---
>> import android.support.v7.app.ActionBar;
>> import android.support.v4.app.FragmentTransaction;


<< public class MainActivity extends FragmentActivity implements ActionBar.TabListener {
---
>> public class MainActivity extends ActionBarActivity implements ActionBar.TabListener {


<< final ActionBar actionBar = getActionBar();
---
>> final ActionBar actionBar = getSupportActionBar();

AndroidManifest.xml 的变化:

<< <uses-sdk android:minSdkVersion="14" />
---
>> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17"/>

<< android:theme="@android:style/Theme.Holo.Light.DarkActionBar">
---
>> android:theme="@style/Theme.AppCompat.Light.DarkActionBar">

这不是关于清理和重建项目,尽管如果它让你感觉更好,你可以这样做。

现在我的 2.3.3 Android 上有带有 SwipeViews 的 ActionBar 和 Tabs。

谷歌非常重视这些反向移植,我必须使用它们,可惜没有更清晰和完整的文档。除非我参考 YouTube 历史,否则我什至很难自己找到那个视频——我什至不知道我是如何找到它的。

于 2013-08-05T12:03:55.623 回答
-1

您不能在 作为 Honeycomb 的Android Api 11下方的选项卡中使用滑动。

所以清单文件看起来像

<uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="17" />
于 2013-08-05T04:36:42.570 回答