将已弃用的“public void onAttach(活动a)”更改为什么?

时间:2016-03-05 23:03:20

标签: java android

我从

下载的代码

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 Studio 1.5.1在包含

后的任何.java文件中都没有标记任何行

import android.content.Context;

但我收到了这条消息:

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

那我应该怎么做?

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

2 个答案:

答案 0 :(得分:1)

  

包含标题中提到的已弃用的电话。

从技术上讲,它会覆盖API Level 23中弃用的方法。该项目设置为使用API​​级别19进行编译。

  

那我应该怎么做?

选项#1:不管它。 onAttach(Activity)在API Level 11+上运行良好(因为这是一个原生片段; backport可以从API Level 4+开始工作)。 API等级23+上的Android将尝试查找onAttach(Context)并使用它,否则将回退到onAttach(Activity)

选项#2:做你做的并忽略警告。自Activity扩展Context以来,寻找onAttach(Activity)的旧设备应致电onAttach(Context)。寻找onAttach(Context)的API Level 23以上设备会很高兴。

更新:我刚尝试使用原生片段的选项#2,我错了:旧设备会忽略onAttach(Context)

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

更新:我刚尝试使用原生片段的#3选项,而API Level 23+设备将调用onAttach()两种版本。

答案 1 :(得分:0)

它在文档中说:

http://developer.android.com/reference/android/app/Fragment.html#onAttach(android.app.Activity)

  

public void onAttach(活动活动)

     

在API级别11中添加此方法在API级别23中已弃用。使用   onAttach(Context)代替。