Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ActionBarSherlock选项卡,Android 2.3或更低版本上的NoClassDefFoundError_Android_Android Fragments_Android Actionbar_Actionbarsherlock - Fatal编程技术网

Android ActionBarSherlock选项卡,Android 2.3或更低版本上的NoClassDefFoundError

Android ActionBarSherlock选项卡,Android 2.3或更低版本上的NoClassDefFoundError,android,android-fragments,android-actionbar,actionbarsherlock,Android,Android Fragments,Android Actionbar,Actionbarsherlock,我试图让我的Android应用程序在Android的较低版本上支持ActionBar,所以我使用的是ActionBarSherlock 4.2.0。我还使用同一个开发人员的NotificationCompat2-1.1.2来获得更好的通知支持 因此,该应用程序有ActionBar选项卡,我正在使用ActionBar.TabListener。我的实现如下所示: public static class TabListener<T extends SherlockFragment> imp

我试图让我的Android应用程序在Android的较低版本上支持ActionBar,所以我使用的是ActionBarSherlock 4.2.0。我还使用同一个开发人员的NotificationCompat2-1.1.2来获得更好的通知支持

因此,该应用程序有ActionBar选项卡,我正在使用ActionBar.TabListener。我的实现如下所示:

public static class TabListener<T extends SherlockFragment> implements ActionBar.TabListener {
    private final SherlockFragmentActivity mActivity;
    private final String mTag;
    private final Class<T> mClass;
    private final Bundle mArgs;
    private android.support.v4.app.Fragment mFragment;

    public TabListener(SherlockFragmentActivity activity, String tag, Class<T> clz) {
        this(activity, tag, clz, null);
    }

    public TabListener(SherlockFragmentActivity activity, String tag, Class<T> clz, Bundle args) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
        mArgs = args;

        // Check to see if we already have a fragment for this tab, probably
        // from a previously saved state.  If so, deactivate it, because our
        // initial state is that a tab isn't shown.
        mFragment = mActivity.getSupportFragmentManager().findFragmentByTag(mTag);
        if (mFragment != null && !mFragment.isDetached()) {
            FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();
            ft.detach(mFragment);
            ft.commit();
        }
    }

    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
        if (mFragment == null) {
            mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs);
            ft.add(android.R.id.content, mFragment, mTag);
        } else {
            ft.attach(mFragment);
        }
    }

    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
        if (mFragment != null) {
            ft.detach(mFragment);
        }
    }

    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
        //Do nothing
    }
}
出现错误的行是实例化选项卡的位置,如下所示:

 ActionBar.Tab stopwatchTab = actionBar.newTab().setText("Stopwatch").setTabListener(new TabListener<StopwatchFragment>(this, "Stopwatch", StopwatchFragment.class));
显然,它找不到片段的类定义,但只能在Android 2.3或更低版本上找到。我该如何解决这个问题

尝试添加要导出的库,这是因为在编译时找到了类,但在运行时没有,请尝试添加要导出的库,如上图所示

你的例子中的lib是sherlock项目

尝试添加要导出的库,这是因为在编译时找到了类,但在运行时没有,请尝试添加要导出的库,如上图所示


您的例子中的lib是sherlock项目

,这可能是因为导入的ActionBar.TabListener来自Android包,而不是ActionBar sherlock包

确保导入是针对com.actionbarsherlock.app.ActionBar.TabListener的

编辑:Shockwave自己解决了这个问题,但对于遇到这个问题的其他人来说:如果您在较低的API级别上遇到ClassNotFound异常,但它在较高的API级别上工作,那么您可以采取一些步骤来调试它

确保您没有实现任何在您的最低API级别中不可用的接口,例如使用API级别11之前的接口

运行Android Lint检查是否有对仅在较新API级别可用的方法的调用


这可能是因为导入的ActionBar.TabListener来自Android软件包,而不是ActionBarSherlock软件包

确保导入是针对com.actionbarsherlock.app.ActionBar.TabListener的

编辑:Shockwave自己解决了这个问题,但对于遇到这个问题的其他人来说:如果您在较低的API级别上遇到ClassNotFound异常,但它在较高的API级别上工作,那么您可以采取一些步骤来调试它

确保您没有实现任何在您的最低API级别中不可用的接口,例如使用API级别11之前的接口

运行Android Lint检查是否有对仅在较新API级别可用的方法的调用


我已经检查过了,它使用的是ActionBarSherlock提供的适当的TabListener,但它仍然不起作用。嗯,你能发布StopwatchFragment的代码吗?当我遇到像这样的ClassNotFound错误时,是因为我让我的片段/活动实现了一个API级别上不可用的接口。在我的例子中,它是一个OnSystemMiviabilityChangeListener。没有必要,你这样说实际上为我指明了正确的方向。我使用的是NumberPickers,这在2.3中显然不可用。我只是将实现更改为自定义库,所有这些都正常工作。现在数字游戏都搞砸了,但至少我解决了这个问题。我将把这个标记为答案,因为你在评论中为我指出了正确的方向,这是正确的做法吗?很高兴你解决了这个问题!我将更新答案,以查找在该API级别不可用的东西。我认为这个场景也是新的Android Lint规则的一个很好的候选。我已经检查过了,它正在使用ActionBarSherlock的适当的TabListener,但它仍然不起作用。嗯,你能发布StopwatchFragment的代码吗?当我遇到像这样的ClassNotFound错误时,是因为我让我的片段/活动实现了一个API级别上不可用的接口。在我的例子中,它是一个OnSystemMiviabilityChangeListener。没有必要,你这样说实际上为我指明了正确的方向。我使用的是NumberPickers,这在2.3中显然不可用。我只是将实现更改为自定义库,所有这些都正常工作。现在数字游戏都搞砸了,但至少我解决了这个问题。我将把这个标记为答案,因为你在评论中为我指出了正确的方向,这是正确的做法吗?很高兴你解决了这个问题!我将更新答案,以查找在该API级别不可用的东西。我认为这个场景也是Android Lint新规则的一个很好的候选。不幸的是,这似乎没有改变任何东西。不幸的是,这似乎没有改变任何东西。
 ActionBar.Tab stopwatchTab = actionBar.newTab().setText("Stopwatch").setTabListener(new TabListener<StopwatchFragment>(this, "Stopwatch", StopwatchFragment.class));