2016-03-05 57 views
0

代码我从将弃用的“public void onAttach(Activity a)”更改为什么?

https://github.com/commonsguy/cw-omnibus/blob/master/Fragments/Static

下载包含在标题中提到的呼叫已不适用。

我改成了如下图所示,最好的希望:

@Override 
public void onAttach(Context a) { // was (Activity a) 
    super.onAttach(a); 
    Log.d(getClass().getSimpleName(), " onAttach()"); 
} 

的Android 1.5.1工作室包括

import android.content.Context;后标记在任何.java文件中没有行。

但我得到这个消息:

...fragmentsstatic W/dalvikvm: VFY: unable to resolve virtual method 105: Landroid/app/Fragment;.onAttach (Landroid/content/Context;)V

所以我应该怎么做呢?

请注意,执行过程按预期进行,没有例外。

+0

您需要重新考虑您的问题。我不明白你想问什么。 –

+1

该方法已被api 23弃用,因此使用低于该版本的版本运行代码仍将使用旧方法 –

+0

@ TudorLuca - 问题可能会被重新设置为:“由于将'Activity'更改为'Context'导致一个关于'Context'的消息,我应该做些什么来避免这个消息?“。但我已经得到了一个很好的答案。 – DSlomer64

回答

1

包含标题中提及的不建议使用的调用。

从技术上讲,它会覆盖在API级别23.弃用方法的项目设置与API级别编译19

所以我应该怎么做呢?

选项#1:保持独立。 onAttach(Activity)在API Level 11+上运行良好(因为这是一个本地片段;反向端口从API Level 4+运行)。 API API 23以上的Android会尝试找到onAttach(Context)并使用它,否则将回退到onAttach(Activity)

选项2:做你做的事,忽略警告。由于 Activity延伸 Context,寻找 onAttach(Activity)的较旧设备应该呼叫 onAttach(Context)。 API Level 23+设备寻找 onAttach(Context)会很高兴。

更新:我只是想选择2原生片段,我错了:旧设备将忽略onAttach(Context)

选项#3:覆盖两种方法。 有可能 API Level 23+设备会同时调用这两个设备;我没有试过这个。旧设备仍然会拨打onAttach(Activity)

UPDATE:我刚刚尝试了使用原生片段的选项#3,并且API Level 23+设备将调用onAttach()两种风味。

+0

所以“**弃用**”并不意味着“不要使用这个”......?当我看到一个方法或其他项目中有一条线被绘制出来时,它确实看起来像是“不使用这个”就是信息。我认为你的评论特别适用于'onAttach',而不是一般的贬低,但是我发现这句话:“当你在文档中看到'弃用'时,通常意味着Android团队建议你使用更好的选项。 “争论继续与另一个人说,“如果你不打算在以后的版本中删除'它'为什么麻烦贬低'它'?” – DSlomer64

+0

@ DSlomer64:弃用的问题在于Google弃用帽子的东西。这就像他们有配额或什么的。因此,确定“弃用”意味着“逃离它尖叫”,“使用它,并计划离开它”或“无论如何使用它”,都是一种艺术形式。 “当你在文档中看到'弃用'时,通常意味着Android团队建议你使用更好的选项” - 该报价看起来很熟悉。 :-)关键词是“通常”。 – CommonsWare

+0

@ DSlomer64:“如果你不打算在以后的版本中删除'它',为什么还要贬低'它'?” - 谷歌*很少* *彻底删除的东西,出于向后兼容性的原因。 2008年为Android 1.0编写的应用程序仍然运行在Android 6.0上。他们可能有问题,但他们运行。 – CommonsWare

相关问题