首页 > 解决方案 > 在 android studio java 代码中在哪里声明视图?声明应该在 onCreate 函数外部还是内部完成

问题描述

我对声明感到困惑。在第一个代码中,我在onCreate函数内部声明了视图,而在第二个代码中,我在onCreate 函数外部声明了视图。第一个代码运行良好,而第二个代码不工作。我不知道哪一个是正确的。在我的其他一些项目中,我在onCreate函数之外声明了但没有任何问题。但是为什么会有问题。


import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    int count=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

//This declaration
        TextView imgNum=findViewById(R.id.textView);
        ImageView frame =  findViewById(R.id.imageView);
        ImageView left= findViewById(R.id.imageView2);
        ImageView right=findViewById(R.id.imageView3);


        left.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                count--;
                if (count<0){
                    count+=9;
                }
            }

但这不起作用。我所做的唯一更改是将所有声明放在onCreate函数之外。


import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    int count=0;

//this declaration
        TextView imgNum=findViewById(R.id.textView);
        ImageView frame =  findViewById(R.id.imageView);
        ImageView left= findViewById(R.id.imageView2);
        ImageView right=findViewById(R.id.imageView3);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        left.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                count--;
                if (count<0){
                    count+=9;
                }

请帮帮我

标签: javaandroidviewdeclarationfindviewbyid

解决方案


第一种方法是正确的。您的第二种方法在is ( )Views之前声明了,这很可能会导致,因为还没有。如果is not ,那么在is 之前无法访问或访问它的内部。ActivitycreatedonCreateapp crashActivitycreatedActivitycreatedview elementsdeclaredactivitycreated


推荐阅读