[英]Call requires API level 11 (current min is 8): android.app.Activity#onCreateView FragmentActivity
[英]Call requires API level 11(current min is 8) android.app.Activity#onCreateView
我是android的新手,我正在開發一個Android應用程序。 但是我的包行在MainActivity.java類中給出了這個錯誤。 有誰能告訴我這個的原因? 這是我的類,包行給出了這個錯誤。
package com.example.eventgyaam;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
int counter;
Button add,sub;
TextView display;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
counter = 0;
add = (Button) findViewById(R.id.bAdd);
sub = (Button) findViewById(R.id.bSub);
display = (Button) findViewById(R.id.tvDisplay);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
counter++;
display.setText("Your total is "+counter);
}
});
sub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
counter--;
display.setText("Your total is "+counter);
}
});
}
}
對於每個Android API,可能會添加新功能,這些功能無法在較低的API版本上運行。 因此,要解決此問題,您只需增加項目中所需的最低API即可。
在你的build.gradle (app-module)
,你會發現這一行:
minSdkVersion 8
將其更改為:
minSdkVersion 11
如果你沒有在build.gradle
找到這一行,請檢查你的AndroidManifest.xml
並將minSdkVersion
從8更改為11或任何你想要的:
<uses-sdk
android:minSdkVersion="11" />
但現在你的應用程序只適用於API 11+,這很好。 這些天沒有人使用下面的API 11,所以它對你來說應該不是問題。
錯誤:
調用需要API級別11(當前最小值為8)android.app.Activity#onCreateView
如果您查看Activity類的javadoc,您將看到在API 11中添加了方法public View onCreateView (View parent, String name, Context context, AttributeSet attrs)
,這就是您收到此錯誤的原因。
您必須將minSdkVersion
從8
更改為11
或者您在類聲明級別使用@SuppressLint("NewApi")
作為Activity
變通方法,如下所示:
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
Fragment
:
@SuppressLint("NewApi")
@Override
public void View onCreateView(String name, Context context, AttributeSet attrs) {
@SuppressLint("NewApi")
是Android Lint工具使用的注釋。
只要代碼中的某些內容不是最佳或可能崩潰,Lint就會告訴您。 通過在那里傳遞NewApi,您將抑制所有警告,告訴您是否使用了minSdkVersion
之后引入的任何API
編輯:
您也可以使用@TargetApi(11)
代替@SuppressLint("NewApi")
。 這些可以在這里找到更多的區別。
希望能幫助到你!
首先,介紹一些細節。 有各種級別的Android API,並且在每個級別,它們可能會引入新功能,如此處所示 。
創建Android應用程序時,指定應用程序將運行的最低級別。 這是uses-sdk
節在manifest
完成的:有關詳細信息,請參閱此處 。
因此,如果您使用僅在第11級提供的功能,則您的代碼將不會像您指定的那樣在8級API上運行。
您必須只使用當前最小值或最小值。
至於為什么你似乎在包裝線上得到了錯誤,並且對於一個似乎沒有出現在你向我們展示的源代碼中的調用,我不能說。 由於它根據您的標題抱怨android.app.Activity#onCreateView
,因此可能存在由setContentView
誇大的視圖R.layout.activity_main
的問題。 或者它可能是兼容性庫本身的問題, 這是聞所未聞的 。
但是,您可能想要考慮簡單地將最小值提升到API-11並完全刪除appcompat
內容,而不是對此進行過多努力。 按照此處的說法 ,只有大約2%的Android用戶在Android-3.0 / API-11之前的版本上發布(截至2016年6月)。 隨着時間的推移,這種情況可能會變小。
因為API 11中添加的片段和當前的minSDK = 8 ,所以您可以在此處看到
您正在使用AppCompatActivity,它在onCreateView()方法中調用Fragment類,雖然您的代碼不實現onCreateView()但AppCompatActivity實現了。 你可以在這里閱讀源代碼
解決方案有兩種可能的解決方案
1-將manifest中的sdk版本更改為> = 11
2-(如果你使用11以下的API)使用SuppressLint注釋來抑制與sdkVersion相關的任何錯誤並實現onCreateView如下
@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;
}
從manifest.xml更改minsdkversion
<uses-sdk
android:minSdkVersion="11"/>
我遇到了同樣的問題,我通過更改活動的超類解決了這個問題。 在“公共類MainActivity擴展AppCompatActivity”中,我輸入了“公共類MainActivity extends Activity”。 更改后問題得到解決。
如果您正在使用Eclipse,請右鍵單擊其中一個項目並單擊屬性,從左側列表中選擇Java Compiler,取消選中“啟用項目特定設置”,單擊“配置工作區設置”鏈接,將編譯器合規性級別更改為最高版本(暫時)這是1.8)。 然后單擊確定並接受它詢問的所有內容。
另外,要確保將所有項目的Project Build Target api更改為最新的api。
編輯:我個人不得不逐一取消選中所有庫項目的“啟用項目特定設置”。 將編譯器合規性工作空間級別更改為1.8,然后僅為我自己的主項目選中“啟用項目特定設置”,並將其編譯器合規性級別更改為1.6。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.