java - 在 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;
}
请帮帮我
解决方案
第一种方法是正确的。您的第二种方法在is ( )Views
之前声明了,这很可能会导致,因为还没有。如果is not ,那么在is 之前无法访问或访问它的内部。Activity
created
onCreate
app crash
Activity
created
Activity
created
view elements
declared
activity
created
推荐阅读
- nginx - 最后提交未显示在反向代理后面的 Gitlab 上
- json - 通过 VBA 完成但在 Postman 上工作时,GET 请求无法显示完整的响应
- javascript - 使用 ajax 获取标题链接响应
- r - 在 R 中按两个类别划分
- python - SGD分类机器学习错误
- javascript - 有没有办法使用 axios 获取 javascript 数据,或者数据只需要采用 json 格式吗?
- gitlab - gitlab问题过滤 - 如何OR过滤而不是AND
- google-cloud-platform - 向表中添加新列后,BigQuery 批量更新 json 文件中的现有表行
- python-3.x - 在熊猫数据框的单个单元格中插入多个值
- python - 如何在TensorFlow中将每行中的最大值更改为1,将所有其他数字更改为0?