将actionbarsherlock与android-support-v4一起使用(版本23) [英] Using actionbarsherlock with android-support-v4 (Version 23)

查看:74
本文介绍了将actionbarsherlock与android-support-v4一起使用(版本23)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

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

我需要版本23的支持库。但是ABS项目与此最新库不兼容,并且出现错误,例如 mAdded无法解析或不是Watson.java中的字段



另外,请不要在尝试时建议我使用AppCompatActivity而不是ABS,但由于我的项目很大,因此会卡在其他混乱的网络中。

解决方案

我遇到了同样的问题。这是我的解决方案:



克隆 ActionBarSherlock

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

  // 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>已添加;

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

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

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

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

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

将以下代码添加到 onCreatePanelMenu 中, onPreparePanel onMenuItemSelected 方法,并将 mFragments.mAdded 替换为 fragments

  List< Fragment>片段= getAddedFragments(); 

FloatMath



<从历史上看,这些方法比等效的基于双精度的
{java.lang.Math}方法要快。在具有JIT的Android版本上,它们的
变慢了,并且此后被重新实现以包装对
的调用{java.lang.Math}。 {java.lang.Math}应该优先使用



所有方法均已从版本23的公共API中删除。



@不建议使用{java.lang.Math}。


替换所有出现的<在 com.actionbarsherlock.internal.nineoldandroids.view.animation.AnimatorProxy

$ p $ b中的带有 Math 的em> FloatMath

I'm developing an app with actionbarsherlock and the ABS project is currently using android-support-v4 library (Version 18). Now I want to extend my project to support Android 6.0 and in order to use some of the methods like

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

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.

解决方案

I'm facing the same problem. Here's my solution:

Clone ActionBarSherlock

No instance field mFragments of type Landroid/support/v4/app/FragmentManagerImpl;

// 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

// 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

@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

List<Fragment> fragments = getAddedFragments();

FloatMath

Historically these methods were faster than the equivalent double-based {java.lang.Math} methods. On versions of Android with a JIT they became slower and have since been re-implemented to wrap calls to {java.lang.Math}. {java.lang.Math} should be used in preference.

All methods were removed from the public API in version 23.

@deprecated Use {java.lang.Math} instead.

Replace all of occurrences of FloatMath with Math in com.actionbarsherlock.internal.nineoldandroids.view.animation.AnimatorProxy

这篇关于将actionbarsherlock与android-support-v4一起使用(版本23)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆