简体   繁体   English

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

[英]Using actionbarsherlock with android-support-v4 (Version 23)

I'm developing an app with actionbarsherlock and the ABS project is currently using android-support-v4 library (Version 18). 我正在使用actionbarsherlock开发一个应用程序,ABS项目目前正在使用android-support-v4库(版本18)。 Now I want to extend my project to support Android 6.0 and in order to use some of the methods like 现在我想扩展我的项目以支持Android 6.0并使用一些方法

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

or 要么

ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, Manifest.permission.READ_CONTACTS)

I require support library version 23. But ABS project is not compatible with this latest library and gives error like mAdded cannot be resolved or is not a field in Watson.java 我需要支持库版本23.但是ABS项目与这个最新的库不兼容并且给出了mAdded无法解决的错误或者不是 Watson.java中的字段

Also, please don't suggest me to use AppCompatActivity instead of ABS as I tried it but getting stuck in a web of other mess as my project is quite big. 此外,请不要建议我使用AppCompatActivity而不是ABS,因为我尝试了它,但因为我的项目很大而陷入了其他混乱的网络。

I'm facing the same problem. 我面临着同样的问题。 Here's my solution: 这是我的解决方案:

Clone ActionBarSherlock 克隆ActionBarSherlock

No instance field mFragments of type Landroid/support/v4/app/FragmentManagerImpl; 没有类型为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;

So we need to get instance of FragmentManagerImpl to access mAdded field 所以我们需要获取FragmentManagerImpl的实例来访问mAdded字段

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

// android.support.v4.app.FragmentController
public FragmentManager getSupportFragmentManager() {
    return mHost.getFragmentManagerImpl();
}

Add the following method to the android.support.v4.app.Watson class 将以下方法添加到android.support.v4.app.Watson类

@Nullable
private List<Fragment> getAddedFragments() {
    return ((FragmentManagerImpl) getSupportFragmentManager()).mAdded;
}

Add the following code to onCreatePanelMenu , onPreparePanel and onMenuItemSelected methods and replace mFragments.mAdded with fragments 将以下代码添加到onCreatePanelMenuonPreparePanelonMenuItemSelected方法,并将mFragments.mAdded替换为片段

List<Fragment> fragments = getAddedFragments();

FloatMath FloatMath

Historically these methods were faster than the equivalent double-based {java.lang.Math} methods. 从历史上看,这些方法比等效的基于double的{java.lang.Math}方法更快。 On versions of Android with a JIT they became slower and have since been re-implemented to wrap calls to {java.lang.Math}. 在带有JIT的Android版本上,它们变慢了,并且已经重新实现以包装对{java.lang.Math}的调用。 {java.lang.Math} should be used in preference. 应优先使用{java.lang.Math}。

All methods were removed from the public API in version 23. 所有方法都从版本23中的公共API中删除。

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

Replace all of occurrences of FloatMath with Math in com.actionbarsherlock.internal.nineoldandroids.view.animation.AnimatorProxy com.actionbarsherlock.internal.nineoldandroids.view.animation.AnimatorProxy中将所有出现的FloatMath替换为Math

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM