当前位置: 首页 > 知识库问答 >
问题:

调用需要API级别11(当前最小值为9)的android。应用程序。活动#onCreateView

罗鸿福
2023-03-14

在SDK更新(23)之后,我得到了这个lint错误,我没有对我的代码做任何更改,它在api级别为9的设备上运行良好。另外,我在代码中根本不调用android.app.活动#onCreateView。如果我单击自动修复,它会将@SuppressLint(NewApi)放入类的声明中@SuppressLint(NewApi)公共类MyActive扩展android.support.v4.app.FragmentActive,这样错误就会消失,我想确定这是否是要走的路。

共有3个答案

萧鸿轩
2023-03-14

用户5292387所述,添加了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的第一个调用是针对运行蜂巢Android操作系统及更高版本的设备。对super的第二个调用是针对运行低于Android操作系统的设备。我认为它看起来更干净,而不是返回空值。然而,android文档确实指出,返回null将导致默认行为。这两种解决方案都应该有效,但我对返回null持怀疑态度,因为这可能会对Android SDK的后续版本产生不利影响。

梁丘波
2023-03-14

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

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

要了解更多信息并做出决定,请查看Android Lint Checks:这里

你也可以使用@TargetApi。

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

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

封梓
2023-03-14

我也遇到了同样的问题。

如果你看一下活动类的javadoc(http://developer.android.com/reference/android/app/Activity.html#onCreateView(android.view.view、java.lang.String、android.content.Context、android.util.AttributeSet)),您将看到方法public view onCreateView(查看父对象、字符串名称、上下文上下文、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作为默认行为,并且API 11之前的方法有一个空的实现。

 类似资料: