java - 我想将变量设置在类的顶部而不是方法中

标签 java android

我似乎无法解决这个令人困惑的问题,我有很多东西想在我的类(class)顶部添加以帮助减少困惑。

由于多种方法使用这些复选框变量。

我想把所有东西都放在开口支架的正下方。

这是有效的,但不是我想要的:

public class MyClass extends Activity implements View.OnClickListener {

    //leaving out most code like onCreate. Just pretend it's there.

    public void checkboth(View view) {

        CheckBox cb1 = (CheckBox) findViewById(R.id.cb1);
        CheckBox cb2 = (CheckBox) findViewById(R.id.cb2);

            cb1.setchecked(true);
            cb2.setchecked(true);

    }

    @Override
    public void onClick(View v) {
    }
}

但是对于我的生活,我无法弄清楚为什么我不能这样做:
public class MyClass extends Activity implements View.OnClickListener {

CheckBox cb1 = (CheckBox) findViewById(R.id.cb1);
CheckBox cb2 = (CheckBox) findViewById(R.id.cb2);

    //leaving out most code like onCreate. Just pretend it's there.

    public void checkboth(View view) {            

        cb1.setchecked(true);
        cb2.setchecked(true);

    }

    @Override
    public void onClick(View v) {
    }
}

最佳答案

无法初始化 View在这样的方法之外

CheckBox cb1 = (CheckBox) findViewById(R.id.cb1);
CheckBox cb2 = (CheckBox) findViewById(R.id.cb2);

因为这意味着这些行在 onCreate() 之前运行这导致这些变量为 null并抛出 NPE当您尝试对这些变量调用方法时。这是因为您调用 setContentView(R.layout.your_layout) onCreate() 内部和你的Views “活”在里面layout .这意味着直到您的 layout 才能初始化它们。已inflated调用 setContentView() .你 必须调用setContentView()在尝试初始化您的 Views 之前 .没有办法绕过那部分。

有些人做的可能有帮助的是创建一个单独的函数,在 setContentView() 之后初始化这些变量。叫做。像这样的东西
public class MyActivity
    // declare your Views so they are global to the class
    TextView tv;
   // more views
    @Override
    public void onCreat(stuff)
    {
       // super call
       setContentView(R.layout.my_layout);
       init();

然后在你的init()函数初始化所有Views你已经声明
private void init()
{
     tv = (TextView) findViewById(R.id.myTextView);
     // more initializations
}

但您可以在 onCreate() 中初始化它们, onResume()或任何地方,只要是 之后 setContentView()以这种方式声明和初始化它们将确保它们都可用于 Activity 的其他函数、监听器、内部类等。 .如果你有很多 Views它可能会减少一点“困惑”。

关于java - 我想将变量设置在类的顶部而不是方法中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44596309/

相关文章:

java - 如何判断 HttpClient.execute() 何时完成获取大型请求中的所有内容?

android - 如何在 Android 中按下按钮时将背景设置为随机颜色?

java - 如何从另一个 Activity 更改开关/切换按钮状态

java - 当应用程序被销毁/取消部署时执行

java - 当存在重复标签时,在JAVA中解析XML

java - 错误: IOException - how to get more specific error

java - 如何在 java/jsp 中使用 split() 读取逗号分隔的文本文件来分隔每个元素

android - 如何撤消 ParseUser.setPassword() 调用?

android - Android 中的守护进程

android - 如何使一组 View 在android中不可见