2015-08-30 53 views
7

SDK更新(23)後,我得到這個lint錯誤,我沒有在我的代碼中做任何改變,它正在工作對於具有api級別9的設備來說還不錯。另外,我不會在代碼中調用android.app.Activity#onCreateView。如果我點擊自動修復,它將@SuppressLint(「NewApi」)放入類@SuppressLint("NewApi") public class MyActivity extends android.support.v4.app.FragmentActivity這樣的聲明中,並且錯誤消失,我想確定是否應該這樣。調用需要API級別11(當前最小爲9)android.app.Activity#onCreateView

+0

[Call要求API等級11(當前最小爲8)的可能重複android.app.Activity#onCreateView](http://stackoverflow.com/questions/32181705/call-requires-api-level-11current-min -is-8-android-app-activityoncreateview) – Murmel

回答

6

我也遇到了同樣的問題。

如果你看一看的Javadoc Activity類(http://developer.android.com/reference/android/app/Activity.html#onCreateView%28android.view.View,%20java.lang.String,%20android.content.Context,%20android.util.AttributeSet%29),你會看到,該方法公衆查看onCreateView(查看父,字符串名稱,上下文的背景下,ATTRS的AttributeSet)在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檢查,但皮棉將停止檢舉此方法有錯誤。

ETA:Javadoc for class表示onCreateView(...)方法返回null作爲默認行爲,並且pre API 11方法的實現爲空。

+0

這是一個無法回答的問題,因爲他們的代碼完全不會調用/覆蓋'onCreateView'。這是Android SDK中的一個錯誤; [這裏是明星問題](https://code.google.com/p/android/issues/detail?id=188677)。 – nkorth

+0

@nkorth,當由getSystemService(Class)返回的LayoutInflater膨脹時,android'調用'onCreateView''。 api文檔就是這樣說的,就在我提供的鏈接中,你沒有去讀。其次,問題是關於使用@SuppressLint來壓制警告,而不是關於錯誤的來源。但是,爲了找到對它的引用而感謝你。 – user5292387

1

@SuppressLint(「NewApi」)是Android Lint工具使用的註釋。

代碼中的某些內容不是最優或可能會崩潰。通過傳遞NewApi那裏,你壓制所有警告,將如果您使用的minSdkVersion

之後推出的更多信息任何API告訴你,然後決定看看Android的皮棉檢查:HERE

您也可以使用@ TargetApi。

區別在於,通過@TargetApi,您可以通過參數聲明代碼中已解決的API級別,以便稍後修改該方法以嘗試引用比@TargetApi中引用的API級別。

@TargetApi是更好的註釋,允許您以更精細的方式告訴構建工具「好的,我修復了這類問題」。

+0

其實我並不想使用註解,我也不需要它們,因爲我的代碼根本不使用Activity#onCreateView。由於android api本身引發錯誤。我正在嘗試爲Android自己的錯誤找到最佳的解決方法。你的答案是有幫助的,並感謝你,但它不回答我的實際問題。 – user65721

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); 
} 

第一次調用超級用於運行Honeycomb Android OS和更高版本的設備。對super的第二次調用是運行比Honeycomb Android OS更少的設備。我認爲它看起來更清潔,而不是返回null。然而,android文檔確實指出返回null將導致默認行爲。這兩種解決方案都應該可以工作,但是我對於返回null表示懷疑,因爲這可能會在Android SDK的後續版本中產生不利影響。

0

大家似乎缺少的東西是他正在使用v4 Support Library中的FragmentActivity。根據定義,該類應該與Android API 4兼容。由於FragmentActivity提供了自己的onCreateVivew()實現,因此不會發出警告。

在我看來這是一個Lint bug。

我認爲@SupressLint(「NewAPI」)是讓周圍的皮棉錯誤(因爲我不相信這是一個錯誤的話)最簡單的方法。還要記住,Lint錯誤不是編譯錯誤。他們向您建議您在代碼中可能存在問題,或者有更好的方法來執行此操作。

相關問題