问题 调用需要API级别11(当前最小值为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);
        }
    });

}
}

8060
2017-08-24 11:55


起源

你可以发布你的Activity实现以及你的模块的build.gradle文件吗? - vman
这是一个Android SDK错误。我推荐主演它 这里 帮助开发人员了解有多少人受到影响。 - nkorth


答案:


首先,介绍一些细节。有 水平 Android API,在每个级别,它们可能会引入新功能 这里

创建Android应用程序时,您可以指定应用程序运行的最低级别。这是在 manifest 随着 uses-sdk 斯坦扎:见 这里 详情。

因此,如果您使用仅在第11级可用的功能,那么您的代码 惯于 像你指定的那样在8级API上运行。

您必须只使用当前最小值或最小值。

至于为什么你似乎在包装线上得到了错误,并且对于一个看起来似乎不是你向我们展示的源代码的电话,我不能说。因为它在抱怨 android.app.Activity#onCreateView 根据你的头衔,那里 可能 成为观点的一个问题 R.layout.activity_main 这被夸大了 setContentView。或者它可能是兼容性库本身的问题, 一些不是闻所未闻的东西

但是,而不是挣扎  很难,你可能想要考虑简单地将最小值提高到API-11并删除 appcompat 完全是东西。按照 这里,只有约2%的Android用户早于Android-3.0 / API-11(截至2016年6月)的版本。随着时间的推移,这种情况只会越来越小。


4
2017-08-24 11:58



这个答案是错的,似乎你还没有看过这个问题。在他的代码中没有他从api级别11使用的功能。在sdk更新后我得到相同的错误,似乎他们的新sdk存在错误。 - user65721
@ user65721,代码中也没有oncreateview,这是错误消息的抱怨。我没有对所给出的代码做出任何声明,只是关于API级别如何工作。如果你能指出一个 具体 我的陈述是错误的(而不是错误地解读答案),我很乐意解决它。 - paxdiablo
@ paxdiablo对不起我的措辞不好,我的意思是,你的帖子没有回答问题,你的陈述是正确的,也有帮助,但这不是这个问题的正确答案。 - user65721
@ user65721这不是真的你可以在下面看到我的答案。 - Error


错误:

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

如果您查看Activity类的javadoc,您将看到该方法 public View onCreateView (View parent, String name, Context context, AttributeSet attrs) 在API 11中添加了这就是您收到此错误的原因。

要么你必须改变你的 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,您将抑制所有警告,告诉您是否使用了在您之后引入的任何API minSdkVersion

编辑:

你也可以使用 @TargetApi(11) 代替 @SuppressLint("NewApi")。可以找到这些之间的更多差异 这里

希望能帮助到你!


5
2017-08-24 12:05



我是android的全新......但作为一般规则'错误抑制'不是一个好主意,特别是在开发过程中 - dsdsdsdsd
还有... +1的解释 Activity class......但是问题:这不是有效的意思 onCreate 方法(显然扩展 onCreateView )无法用于API <11 ?? ... 谢谢。 - dsdsdsdsd
@dsdsdsdsd我添加了onCreateView for Fragment,因为Fragment中没有onCreate方法 - Rajesh


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


5
2017-08-24 12:02



好吧,5%的人仍在使用3.0之前的版本,但在营销决策方面,这个数字已接近零(并且可能会随着人们升级手机而变小):-) - paxdiablo
@paxdiablo在我的国家/地区,使用3.0之前的人大约占Android用户的30%(API等级10) - EpicPandaForce
史诗,可能是这样,但移动开发商很少针对一个国家,他们对全球市场更感兴趣,特别是0.99美元流行音乐:-) - paxdiablo


因为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;
}

1
2017-10-21 08:40





从manifest.xml更改minsdkversion

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

0
2017-08-24 11:58





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


0
2017-10-27 08:38



这是完整的答案吗? - Enamul Hassan
这摆脱了问题。从扩展Activity开始,我们转移到AppCompatActivity以向后兼容新功能,并建议完全保留它们并使用相同的旧Activity calss - user2779311


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

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

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


0
2017-07-24 19:15