调用需要API级别11(当前最小值为8)android.app.Activity#onCreateView

时间:2015-08-24 11:55:05

标签: java android

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

}
}

7 个答案:

答案 0 :(得分:5)

对于每个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,所以对你来说这应该不是问题。

答案 1 :(得分:5)

错误:

  

调用需要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")。可以找到这些之间的更多差异here

希望它有所帮助!

答案 2 :(得分:4)

首先,介绍一些细节。 Android API有级别,根据here,每个级别都可以引入新功能。

创建Android应用程序时,指定应用程序运行的最低级别。这是在manifest中使用uses-sdk节完成的:有关详细信息,请参阅here

因此,如果您使用仅在第11级提供的功能,则您的代码不会在您已指定的8级API上运行。

您必须只使用当前最低价格或最低价格。

至于为什么你似乎在包装行上收到错误,并且对于你似乎没有在我们向我们展示的源代码中的电话,我无法说。由于它根据您的标题抱怨android.app.Activity#onCreateView,因此可能成为R.layout.activity_mainsetContentView夸大的问题}。或者它可能是兼容性库本身的问题something that's not unheard of

然而,你可能想要考虑简单地将最小值提高到API-11并完全放弃appcompat的东西,而不是努力使用太多。根据{{​​3}},只有约2%的Android用户仍然早于Android-3.0 / API-11(截至2016年6月)发布的版本。随着时间的推移,这种情况只会越来越小。

答案 3 :(得分:1)

因为API 11中添加的片段和您当前的minSDK = 8 ,您可以看到here

您正在使用AppCompatActivity,它在onCreateView()方法中调用Fragment类,虽然您的代码没有实现onCreateView()但AppCompatActivity实现了。您可以阅读源代码here

解决方案有两种可能的解决方案

1-将清单中的sdk版本更改为&gt; = 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;
}

答案 4 :(得分:0)

从manifest.xml更改你的minsdkversion

<uses-sdk
    android:minSdkVersion="11"/>

答案 5 :(得分:0)

我遇到了同样的问题,我通过更改活动的超类解决了这个问题。 “公共类MainActivity扩展了AppCompatActivity”, 我输入了“公共类MainActivity extends Activity”。 更改后问题得到解决。

答案 6 :(得分:0)

如果您正在使用Eclipse,请右键单击其中一个项目并单击属性,从左侧列表中选择Java Compiler,取消选中“启用项目特定设置”,单击“配置工作区设置”链接,将“编译器合规性级别”更改为最高版本(现在是1.8)。 然后单击确定并接受它询问的所有内容。

另外,为确保将所有项目的Project Build Target api更改为最新的api。

编辑: 我个人不得不逐个取消选中所有库项目的“启用项目特定设置”。将编译器合规性工作空间级别更改为1.8,然后仅为我自己的主项目选中“启用项目特定设置”,并将其编译器合规性级别更改为1.6。