当前位置: 首页 > 知识库问答 >
问题:

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

太叔烨霖
2023-03-14

我对申报有一个困惑。在第一段代码中,我在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;
                }

请帮帮我

共有1个答案

令狐昂雄
2023-03-14

第一种方法是正确的。第二个方法在活动创建之前声明视图(oncreate),这很可能会导致应用程序崩溃,因为活动尚未创建。如果活动不是创建的,则在活动创建的之前,不能声明或访问其内部的视图元素

 类似资料:
  • 我不明白发生了什么事。我严格遵循所有的微软文档,事实上甚至不使用任何我自己的脚本/代码。首先,我按照他们的文档创建Python函数。成功了。https://docs.microsoft.com/en-us/azure/azure-functions/create-first-function-cli-python?tabs=azure-cli、cmd、browser使用命令行工具将Azure功能连

  • 问题内容: 以下代码段是否会降低性能? 还是这段代码实际上更有意义? 如果在字节码中这两个完全相等,那么显然第一种方法在样式方面看起来更好,但我想确保确实如此。 问题答案: 在当今的编译器中,没有。我在最小范围内声明对象,因为对于下一个家伙而言,它更具可读性。

  • 问题内容: 这两种方法有什么优势吗? 范例1: 范例2: 问题答案: 没有区别-实例变量初始化实际上是由编译器放入构造函数中的。 第一种变体更具可读性。 你不能使用第一个变体进行异常处理。 另外还有初始化块,编译器也将其放在构造函数中: 但是,字段声明不是任何方法的一部分,因此它们不能像语句那样执行。相反,Java编译器会自动生成实例字段初始化代码,并将其放入该类的一个或多个构造函数中。初始化代码

  • 5.1. 函数声明 函数声明包括函数名、形式参数列表、返回值列表(可省略)以及函数体。 func name(parameter-list) (result-list) { body } 形式参数列表描述了函数的参数名以及参数类型。这些参数作为局部变量,其值由参数调用者提供。返回值列表描述了函数返回值的变量名以及类型。如果函数返回一个无名变量或者没有返回值,返回值列表的括号是可以省略的。如

  • 问题内容: 我相信在AS3中,您应该在循环外初始化所有变量,以提高性能。JavaScript也是如此吗?哪个更好/更快/最佳实践? 要么 问题答案: 有 绝对没有区别 意义还是性能,在JavaScript或ActionScript。 是解析器的指令,而 不是 运行时执行的命令。如果在函数体(*)中的任何位置一次或多次声明了特定的标识符,则该标识符在块中的所有使用将引用局部变量。声明是在循环内部,循

  • 问题内容: 我试图在react-js类中声明一个变量。该变量应该可以在不同的函数中访问。这是我的代码 在onMove上,this.test的值是不确定的。我知道我可以将值放在状态上,但我不想这样做,因为每次值更改时,都会调用render(),这是不必要的。我是新来的反应者,我做错了什么吗? 问题答案: 在React中使用ES6语法不会绑定到用户定义的函数,但是会绑定到组件生命周期方法。 因此,您声