在 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
之前声明Views
是created
(onCreate
),这很可能会导致app crash
,因为Activity
还不是created
。如果Activity
不是created
,那么它里面的view elements
不能是declared
或者直到activity
是created
才能访问。
【讨论】:
以上是关于在 android studio java 代码中在哪里声明视图?声明应该在 onCreate 函数外部还是内部完成的主要内容,如果未能解决你的问题,请参考以下文章
在 android studio java 代码中在哪里声明视图?声明应该在 onCreate 函数外部还是内部完成