gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:42:00 27 4
gpt4 key购买 nike

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

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

我希望所有内容都在左括号正下方的顶部。

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

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调用这些变量的方法。这是因为您在 onCreate() 内部调用了 setContentView(R.layout.your_layout) 并且您的 Views 在该 布局。这意味着在您的布局通过调用setContentView()膨胀之前,它们无法被初始化。在尝试初始化您的 View 之前,您必须调用setContentView()。没有办法绕过那部分。

有些人所做的可能会有所帮助的是创建一个单独的函数,在调用 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/18880962/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com