Dav*_*uca 72 android android-appcompat
我已将SDK更新到最新版本(API 23),并且onAttach(Activity)不推荐使用片段方法.因此,不是使用该方法,现在我正在使用,onAttach(Context)但是在生命周期中不会调用此方法.活动是AppCompatActivity来自v7 的实例,片段是类Fragment(android.app.Fragment)的实例.
有任何想法如何onAttach在API 23中工作?
解
我找到了一些可以帮助您理解和解决此问题的答案:
解决方案:
使用getSupportFragmentManager()将强制您使用支持库中的片段.因此,第一个解决方案是使用支持lib中的片段替换所有片段并使用getSupportFragmentManager().
我已经实现的解决方案是处理2种可能性(1.应用程序在API <23的设备上运行,应用程序在API> = 23的设备上运行).
不久,在我的实现中,我有一个来自项目的所有片段的基类,我在那里添加了这个代码:
/*
* onAttach(Context) is not called on pre API 23 versions of Android and onAttach(Activity) is deprecated
* Use onAttachToContext instead
*/
@TargetApi(23)
@Override
public final void onAttach(Context context) {
super.onAttach(context);
onAttachToContext(context);
}
/*
* Deprecated on API 23
* Use onAttachToContext instead
*/
@SuppressWarnings("deprecation")
@Override
public final void onAttach(Activity activity) {
super.onAttach(activity);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
onAttachToContext(activity);
}
}
/*
* Called when the fragment attaches to the context
*/
protected void onAttachToContext(Context context) {
}
Run Code Online (Sandbox Code Playgroud)
现在我简单地在我需要它的所有片段上覆盖onAttachToContext(Context)方法.
Fra*_*rio 27
我用这种方式解决了这个问题:
@TargetApi(23)
@Override public void onAttach(Context context) {
//This method avoid to call super.onAttach(context) if I'm not using api 23 or more
//if (Build.VERSION.SDK_INT >= 23) {
super.onAttach(context);
onAttachToContext(context);
//}
}
/*
* Deprecated on API 23
* Use onAttachToContext instead
*/
@SuppressWarnings("deprecation")
@Override public void onAttach(Activity activity) {
super.onAttach(activity);
if (Build.VERSION.SDK_INT < 23) {
onAttachToContext(activity);
}
}
/*
* This method will be called from one of the two previous method
*/
protected void onAttachToContext(Context context) {}
Run Code Online (Sandbox Code Playgroud)
小智 17
您应该尝试使用Fragment的支持库版本.
你需要切换到import android.support.v4.app.Fragment;而不是import android.app.Fragment;.您还需要确保使用getSupportFragmentManager()而不是getFragmentManager().
请在此处发布有关此 BUG 的信息
GOOGLE AOSP 项目主页上的问题:
https://code.google.com/p/android/issues/detail?id=185465
附:这不是你的工作来寻找这个问题的解决方案并找到任何类型的解决方法......而是强迫谷歌修复其损坏的 API!要做到这一点,你需要像我说的那样抱怨。
相关问题 - 来自片段的 getContext():
https://code.google.com/p/android/issues/detail?id=185848
我想出了同样的问题。我的 minSdkVersion 为 19,targetSdkVersion 为 23,我在 AppCompatActivity 中使用 fragmentManager。
onAttach(Activity activity)被标记为已弃用,但当我将其替换为onAttach(Context context).
所以相反,我现在有两个版本,当我在 API22 上运行我的应用程序时,会onAttach(Activity activity) 被触发,即使它被标记为已弃用。
我尚未在 Android Marshmallow 设备上对其进行测试,但我的理解是它会运行该onAttach(Context context)版本,而忽略另一个版本。
更新以考虑@skaar 在以下评论中的观察:我现在可以在 API23 上进行测试,并且可以确认在平台 23 上运行会导致调用这两种方法(使用 Activity和Context)。感谢您的提醒!
| 归档时间: |
|
| 查看次数: |
19023 次 |
| 最近记录: |