我从
下载的代码 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
那我应该怎么做?
请注意,执行按预期进行,没有例外。
答案 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)代替。