簡體   English   中英

調用需要API級別11(當前最小值為8)android.app.Activity#onCreateView

[英]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) ,這就是您收到此錯誤的原因。

您必須將minSdkVersion8更改為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM