在 android studio java 代码中在哪里声明视图?声明应该在 onCreate 函数外部还是内部完成

Posted

技术标签:

【中文标题】在 android studio java 代码中在哪里声明视图?声明应该在 onCreate 函数外部还是内部完成【英文标题】:Where to declare views in android studio java code? Whether the declaration should be done outside or inside onCreate function 【发布时间】:2021-06-13 09:07:06 【问题描述】:

我对声明感到困惑。在第一个代码中,我在 onCreate 函数中声明了 views,而在第二个代码中,我在 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;
                

请帮帮我

【问题讨论】:

我的猜测是视图还没有被加载,因此它们没有被初始化。不过,我不是 100% 确定。您是否尝试过 System.out.println(imgNum + " | " + frame + " | " + left + " | " + right); 之类的方法来查看它们有哪些值(如果它们为空或不为空)? 【参考方案1】:

第一种方法是正确的。您的第二种方法在Activity 之前声明Viewscreated (onCreate),这很可能会导致app crash,因为Activity 还不是created。如果Activity不是created,那么它里面的view elements不能是declared或者直到activitycreated才能访问。

【讨论】:

以上是关于在 android studio java 代码中在哪里声明视图?声明应该在 onCreate 函数外部还是内部完成的主要内容,如果未能解决你的问题,请参考以下文章

计算Android Studio中所有java类中的代码行

android studio中怎么设置点击按钮响应?

在 android studio java 代码中在哪里声明视图?声明应该在 onCreate 函数外部还是内部完成

添加一个 java 程序以在 Android Studio 应用程序中运行

Android Studio

[Java] 使用Android Studio编写Java测试代码