调用需要API级别11(目前最小为9)



在SDK更新(23)之后,我得到了这个lint错误,我没有在我的代码中做任何更改,它在api级别9的设备上工作正常。我也不调用android.app。活动#onCreateView在我的代码。如果我点击自动修复,它把@SuppressLint("NewApi")类@SuppressLint("NewApi") public class MyActivity extends android.support.v4.app.FragmentActivity的声明像这样和错误消失,我想确定如果这是要走的路。

我也遇到过同样的问题。

如果你看一下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 for class表明onCreateView(…)方法都返回null作为默认行为,并且pre API 11方法有一个空的实现。

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

代码中的某些部分不是最佳的或可能崩溃。通过在那里传递NewApi,您将抑制所有警告,这些警告将告诉您是否正在使用minSdkVersion

之后引入的任何API。

更多信息和决定看Android Lint检查:在这里

也可以使用@TargetApi。

不同之处在于,使用@TargetApi,您通过参数声明您在代码中处理的API级别,因此,如果稍后修改方法以尝试引用比@TargetApi引用的API级别更新的东西,则错误可能再次弹出。

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

如user5292387所述,oncreateview已添加。我使用

而不是抑制lint
@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操作系统的设备。我认为它看起来更干净,而不是返回null。然而,android文档确实声明返回null将导致默认行为。任何一种解决方案都应该工作,但是我对返回null持怀疑态度,因为这可能会在以后的Android SDK版本中产生不利影响。

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

在我看来这是一个Lint错误。

我认为@SupressLint("NewAPI")是解决Lint错误的最简单方法(因为我根本不相信这是一个错误)。还要记住,Lint错误不是编译错误。它们是给你的建议,你的代码可能有问题,或者有更好的方法来解决问题。

最新更新