android studio识别不出来明明应该有的方法addView(),代码见图,求大神看看可能是什么原因造成的

不知道是版本问题,还是什么问题,刚刚入门,摸不着头脑,完全按照李刚的android疯狂讲义上的例子打的代码,但是addView永远是红色的,说无法识别的符号,明明有这个方... 不知道是版本问题,还是什么问题,刚刚入门,摸不着头脑,完全按照李刚的android疯狂讲义上的例子打的代码,但是addView永远是红色的,说无法识别的符号,明明有这个方法呀5555 展开
 我来答
第一碗羊杂割
2016-10-20 · TA获得超过6145个赞
知道大有可为答主
回答量:1107
采纳率:80%
帮助的人:563万
展开全部

出现这个问题是因为题主试图在一个类的初始化域(Initializing Field)中进行除赋值及声明变量以外的操作,而这种操作在 Java 中是不允许的。通常一个 Java 公共类的结构如下:


public class Foo {
    
    // 这里叫做初始化域,用来声明一个类中的全局变量,此区域中只能进行
    // 赋值或声明新变量的操作,笼统一点说就是此区域中的代码必须是 
    // ImageView image = ...; 或者 ImageView image; 这种形式。
    // 题主的代码试图在此区域中调用 LinearLayout 的 addView 方法,却
    // 没有将其返回值赋予任何变量,所以会报错。
    int varOne = 3;
    private int varTwo = 3;
    public String varThree = "STR";
    protected String varFour = varThree.toString();
    int[] varFive = new int[] {3, 4, 5, 6};
    
    // 这个区块叫初始化块(Initializer Block),此区域中的所有代码会被
    // 复制到类的构造函数(下方)当中,所以此区域中可以进行方法的调用而不
    // 进行赋值。此区域是可有可无的。
    {
        varFour.toString();
    }
    
    // 这个区域叫做构造函数(Constructor),它是在该类对象被创建时第一个
    // 被调用的函数。构造函数的函数名需要与类名完全相同,且没有任何返回值,
    // (即连 void 也不会返回)。此函数的主要目的是初始化在初始化域中所定
    // 义的各种全局变量。构造函数不是必需的,如果没有此函数 Java 会自动
    // 继承父类的构造函数,如果没有父类 Java 会自动添加一个空的构造函数。
    public Foo(int a, String b, LinearLayout c) {
        this.varOne = a;
        ...
    }
    
    
    // 以下就是类的各种常规方法的定义了。
    private void methodOne() {
        ...
    }
    
    public void methodTwo() {
        ...
    }
    
    protected static String methodThree() {
        ...
    }
     
}


由上可见,如果想调用一个变量的方法,而不将其返回值赋予新的变量的话,必须在类的初始化块、构造函数或者各种方法中进行操作,而不能在其他地方。事实上,Android 的 Activity 类虽然没有定义构造函数,但提供了 onCreate 方法让你进行变量的初始化以及对变量的各种操作。onCreate 方法会在一个新的 Activity 对象建立后立即执行,所以题主应该将 addView 方法的执行移动到 onCreate 方法中,如下:


public class MainActivity extends AppCompatActivity {
    
    private int[] mImages = new int[] {
        R.drawable.image01,
        R.drawable.image02,
        R.drawable.image03
    };
    
    private int mCurrentImg = 0;
    private LinearLayout mLinearLayout;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        mLinearLayout = (LinearLayout) findViewById(R.id.rest);
        ImageView imageView = new ImageView(this);
        mLinearLayout.addView(imageView);
    }

}
小傻

2016-10-18 · 知道合伙人软件行家
小傻
知道合伙人软件行家
采纳数:11567 获赞数:31134
已经做过两个上架的app和两个网页项目.

向TA提问 私信TA
展开全部
你将addview这个方法放到oncreate里面去执行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式