使用actionbarsherlock和android-support-v4(版本23)

Vis*_*fre 3 android actionbarsherlock android-support-library

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

ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_CALENDAR)
Run Code Online (Sandbox Code Playgroud)

要么

ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, Manifest.permission.READ_CONTACTS)
Run Code Online (Sandbox Code Playgroud)

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

此外,请不要建议我使用AppCompatActivity而不是ABS,因为我尝试了它,但因为我的项目非常大而陷入其他混乱的网络中.

Nik*_*pov 8

我面临着同样的问题.这是我的解决方案:

克隆ActionBarSherlock

没有类型为Landroid/support/v4/app/FragmentManagerImpl的实例字段mFragments;

// 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;
Run Code Online (Sandbox Code Playgroud)

所以我们需要获取FragmentManagerImpl的实例来访问mAdded字段

// android.support.v4.app.FragmentActivity
public FragmentManager getSupportFragmentManager() {
    return mFragments.getSupportFragmentManager();
}

// android.support.v4.app.FragmentController
public FragmentManager getSupportFragmentManager() {
    return mHost.getFragmentManagerImpl();
}
Run Code Online (Sandbox Code Playgroud)

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

@Nullable
private List<Fragment> getAddedFragments() {
    return ((FragmentManagerImpl) getSupportFragmentManager()).mAdded;
}
Run Code Online (Sandbox Code Playgroud)

将以下代码添加到onCreatePanelMenu,onPreparePanelonMenuItemSelected方法,并将mFragments.mAdded替换为片段

List<Fragment> fragments = getAddedFragments();
Run Code Online (Sandbox Code Playgroud)

FloatMath

从历史上看,这些方法比等效的基于double的{java.lang.Math}方法更快.在带有JIT的Android版本上,它们变慢了,并且已经重新实现以包装对{java.lang.Math}的调用.应优先使用{java.lang.Math}.

所有方法都从版本23中的公共API中删除.

@deprecated改为使用{java.lang.Math}.

替换所有出现的FloatMath数学com.actionbarsherlock.internal.nineoldandroids.view.animation.AnimatorProxy