将actionbarsherlock与android-support-v4(版本23)一起使用

将actionbarsherlock与android-support-v4(版本23)一起使用,android,actionbarsherlock,android-support-library,Android,Actionbarsherlock,Android Support Library,我正在用actionbarsherlock开发一个应用程序,ABS项目目前正在使用android-support-v4库(版本18)。现在我想扩展我的项目以支持Android 6.0,并使用一些方法,如 ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_CALENDAR) 或 我需要支持库版本23。但是ABS项目与这个最新的库不兼容,并且给出了一些错误,比如mAdded无法解决或者不是Watson

我正在用actionbarsherlock开发一个应用程序,ABS项目目前正在使用android-support-v4库(版本18)。现在我想扩展我的项目以支持Android 6.0,并使用一些方法,如

ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_CALENDAR)

我需要支持库版本23。但是ABS项目与这个最新的库不兼容,并且给出了一些错误,比如mAdded无法解决或者不是Watson.java中的一个字段


另外,请不要建议我使用AppCompatActivity而不是ABS,因为我尝试了它,但由于我的项目太大而陷入了一个混乱的网络中。

我也面临着同样的问题。以下是我的解决方案:

克隆

没有Landroid/support/v4/app/FragmentManagerImpl类型的实例字段MFFragments

将以下方法添加到android.support.v4.app.Watson类

@Nullable
private List<Fragment> getAddedFragments() {
    return ((FragmentManagerImpl) getSupportFragmentManager()).mAdded;
}
@Nullable
私有列表getAddedFragments(){
return((FragmentManagerImpl)getSupportFragmentManager()).mAdded;
}
将以下代码添加到onCreatePanelMenu、onPreparePanel和onMenuItemSelected方法中,并用片段替换MFFragments.mAdded

List fragments=getAddedFragments();
浮动数学

从历史上看,这些方法比同等的双基方法更快 {java.lang.Math}方法。在具有JIT的Android版本上 变得更慢,并已重新实现以包装对的调用 {java.lang.Math}。{java.lang.Math}应在中使用 偏好

在版本23中,所有方法都已从公共API中删除

@不推荐使用{java.lang.Math}


将com.actionbarsherlock.internal.nineolandroids.view.animation.AnimatorProxy中出现的所有FloatMath替换为Math,考虑到2014年12月ABS的不受欢迎,情况只会越来越糟。
请不要建议我使用AppCompatActivity
。今天,如果没有AppCompat,构建一个Android项目是非常疯狂的,也是不可能的。对于那些不得不在2019年及以后处理此类任务的可怜人来说,请注意,Android支持库的最新版本已经弃用,然后删除了ABS的SearchView小部件中使用的KeyEventCompat类。您必须选择低于v28.0.0的版本。
// android.support.v4.app.FragmentActivity

// com.android.support:support-v4:22.+
final FragmentManagerImpl mFragments = new FragmentManagerImpl();

// com.android.support:support-v4:23.+
final FragmentController mFragments = FragmentController.createController(new HostCallbacks());

// android.support.v4.app.FragmentManager.FragmentManagerImpl
ArrayList<Fragment> mAdded;
// android.support.v4.app.FragmentActivity
public FragmentManager getSupportFragmentManager() {
    return mFragments.getSupportFragmentManager();
}

// android.support.v4.app.FragmentController
public FragmentManager getSupportFragmentManager() {
    return mHost.getFragmentManagerImpl();
}
@Nullable
private List<Fragment> getAddedFragments() {
    return ((FragmentManagerImpl) getSupportFragmentManager()).mAdded;
}
List<Fragment> fragments = getAddedFragments();