调用需要API级别11(当前最小值为9)android.app.Activity#onCreateView

时间:2015-08-30 08:20:18

标签: android lint

在SDK更新(23)之后,我收到了这个lint错误,我没有对我的代码进行任何更改,它在api级别为9的设备上运行正常。此外,我不调用android.app .Activity#onCreateView在我的代码中。如果我单击自动修复,它会将@SuppressLint(" NewApi")放到类@SuppressLint("NewApi") public class MyActivity extends android.support.v4.app.FragmentActivity的声明中,并且错误消失,我想确定这是否是通往去。

4 个答案:

答案 0 :(得分:7)

我也遇到了同样的问题。

如果您查看Activity类(http://developer.android.com/reference/android/app/Activity.html#onCreateView%28android.view.View,%20java.lang.String,%20android.content.Context,%20android.util.AttributeSet%29)的javadoc,您将看到方法 public View onCreateView(View parent,String name,Context context,AttributeSet attrs)在API 11中添加了

我没有在类声明级别使用@SuppressLint(" NewApi"),而是在代码中添加了特定的方法,并抑制了方法声明的lint警告。像这样:

@SuppressLint("NewApi")
public View onCreateView(View parent, String name, Context context, AttributeSet attrs)
{
    if(Build.VERSION.SDK_INT >= 11)
      return super.onCreateView(parent, name, context, attrs);
    return null;
}

这样,类的代码的任何未来添加仍将由lint检查,但lint将停止标记此方法并显示错误。

ETA:类的Javadoc表示onCreateView(...)方法都返回null作为默认行为,并且pre API 11方法的实现为空。

答案 1 :(得分:1)

@SuppressLint(" NewApi")是Android Lint工具使用的注释。

代码中的某些内容不是最佳的或可能会崩溃。通过在那里传递NewApi,您将抑制所有警告,告诉您是否使用了minSdkVersion之后引入的任何API

有关更多信息并做出决定,请查看Android Lint检查:HERE

您也可以使用@TargetApi。

不同之处在于,使用@TargetApi,您可以通过参数声明代码中已解决的API级别,以便稍后修改方法以尝试引用比API更新的内容时,可以再次弹出错误@TargetApi中引用的等级。

@TargetApi是更好的注释,允许你告诉构建工具"好的,我修复了这类问题"以更细粒度的方式。

答案 2 :(得分:0)

如user5292387所述,添加了oncreateview。而不是抑制我使用的棉绒

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public View onCreateView(View parent, String name, Context context, AttributeSet attrs) 
{
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
        super.onCreateView(parent, name, context, attrs) : 
        super.onCreateView(name, context, attrs);   
}

第一次调用super是针对运行Honeycomb Android OS及更高版本的设备。第二次调用super是针对运行少于Honeycomb Android OS的设备。我认为它看起来更干净而不是返回null。然而,android文档确实声明返回null将导致默认行为。两种解决方案都应该有效,但是我对返回null持怀疑态度,因为这可能会对Android SDK的后续版本产生负面影响。

答案 3 :(得分:0)

每个人似乎都缺少的是他正在使用v4支持库中的FragmentActivity。根据定义,这个类应该一直兼容到Android API 4.由于FragmentActivity提供了自己的onCreateVivew()实现,因此不应发出警告。

在我看来,这是一个Lint bug。

我认为@SupressLint(" NewAPI")是解决Lint错误的最简单方法(因为我不相信它是一个错误)。还要记住,Lint错误不是编译错误。他们向您建议您可能在代码中遇到问题,或者有更好的方法。