在 android studio 中声明按钮
Declaring buttons in android studio
在 Android Studio java class 中声明按钮的最佳方式是什么?例如我有按钮和文本字段:
TextView t = (TextView) findViewById(R.id.Question);
TextView A = (TextView) findViewById(R.id.AnswerA);
TextView B = (TextView) findViewById(R.id.AnswerB);
TextView C = (TextView) findViewById(R.id.AnswerC);
TextView D = (TextView) findViewById(R.id.AnswerD);
Button next_test = (Button)findViewById(R.id.Next_Text);
Button b = (Button)findViewById(R.id.button);
Android 当我在 class 下方声明它们时,Studio 会抛出错误,如下所示:
public class main extends AppCompatActivity {
TextView t = (TextView) findViewById(R.id.Question);
TextView A = (TextView) findViewById(R.id.AnswerA);
TextView B = (TextView) findViewById(R.id.AnswerB);
TextView C = (TextView) findViewById(R.id.AnswerC);
TextView D = (TextView) findViewById(R.id.AnswerD);
Button next_test = (Button)findViewById(R.id.Next_Text);
Button b = (Button)findViewById(R.id.button);
@Override
protected void onCreate(Bundle savedInstanceState) {..........
当我在它们需要的方法中声明它们时它不会抛出错误,但是我必须多次声明它们并在 oncreate 中声明 final。
有没有办法只声明一次?
您必须在onCreate
中声明您的观点。将您的 findViewById
方法放入 onCreate
.
声明视图的正确方法:
public class main extends AppCompatActivity {
TextView tv;
@Override
super.onCreate(savedInstanceState);
setContentView(R.layout.yout layout name);
tv = (TextView) findViewById(R.id.Question);
}
这适用于所有视图,如按钮、图像视图、线性布局、图像视图等....
您的成员变量应该可以在您的 class 中全局访问。但是如果 xml 没有被膨胀,你就不能通过 id 找到视图。你的代码应该是这样的:
public class main extends AppCompatActivity {
TextView t;
TextView A;
TextView B;
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.your_layout); // THIS IS VERY IMPORTANT
t = (TextView) findViewById(R.id.Question);
A = (TextView) findViewById(R.id.AnswerA);
B = (TextView) findViewById(R.id.AnswerB);
....
}
方法 findViewById
在 R.layout.your_layout 中查找您的视图...如果您不调用 setContentView()
,它不会找到任何东西,而是 return null。希望它有意义:)
你可以这样做
public class main extends AppCompatActivity {
private TextView t;
private TextView A;
private TextView B;
private TextView C;
private TextView D;
private Button next_test;
private Button b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initialize();
}
private void initialize(){
t = (TextView) findViewById(R.id.Question);
A = (TextView) findViewById(R.id.AnswerA);
B = (TextView) findViewById(R.id.AnswerB);
C = (TextView) findViewById(R.id.AnswerC);
D = (TextView) findViewById(R.id.AnswerD);
next_test = (Button)findViewById(R.id.Next_Text);
b = (Button)findViewById(R.id.button);
}
在OnCreate
方法中声明它们
public class main extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_activity_layout);
TextView t = (TextView) findViewById(R.id.Question);
TextView A = (TextView) findViewById(R.id.AnswerA);
TextView B = (TextView) findViewById(R.id.AnswerB);
TextView C = (TextView) findViewById(R.id.AnswerC);
TextView D = (TextView) findViewById(R.id.AnswerD);
Button next_test = (Button)findViewById(R.id.Next_Text);
Button b = (Button)findViewById(R.id.button);
.....
}
您应该始终在 onCreate
方法中初始化它们并放在
之后
setContentView(R.layout.your_activity_layout);
在 Android Studio java class 中声明按钮的最佳方式是什么?例如我有按钮和文本字段:
TextView t = (TextView) findViewById(R.id.Question);
TextView A = (TextView) findViewById(R.id.AnswerA);
TextView B = (TextView) findViewById(R.id.AnswerB);
TextView C = (TextView) findViewById(R.id.AnswerC);
TextView D = (TextView) findViewById(R.id.AnswerD);
Button next_test = (Button)findViewById(R.id.Next_Text);
Button b = (Button)findViewById(R.id.button);
Android 当我在 class 下方声明它们时,Studio 会抛出错误,如下所示:
public class main extends AppCompatActivity {
TextView t = (TextView) findViewById(R.id.Question);
TextView A = (TextView) findViewById(R.id.AnswerA);
TextView B = (TextView) findViewById(R.id.AnswerB);
TextView C = (TextView) findViewById(R.id.AnswerC);
TextView D = (TextView) findViewById(R.id.AnswerD);
Button next_test = (Button)findViewById(R.id.Next_Text);
Button b = (Button)findViewById(R.id.button);
@Override
protected void onCreate(Bundle savedInstanceState) {..........
当我在它们需要的方法中声明它们时它不会抛出错误,但是我必须多次声明它们并在 oncreate 中声明 final。
有没有办法只声明一次?
您必须在onCreate
中声明您的观点。将您的 findViewById
方法放入 onCreate
.
声明视图的正确方法:
public class main extends AppCompatActivity {
TextView tv;
@Override
super.onCreate(savedInstanceState);
setContentView(R.layout.yout layout name);
tv = (TextView) findViewById(R.id.Question);
}
这适用于所有视图,如按钮、图像视图、线性布局、图像视图等....
您的成员变量应该可以在您的 class 中全局访问。但是如果 xml 没有被膨胀,你就不能通过 id 找到视图。你的代码应该是这样的:
public class main extends AppCompatActivity {
TextView t;
TextView A;
TextView B;
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.your_layout); // THIS IS VERY IMPORTANT
t = (TextView) findViewById(R.id.Question);
A = (TextView) findViewById(R.id.AnswerA);
B = (TextView) findViewById(R.id.AnswerB);
....
}
方法 findViewById
在 R.layout.your_layout 中查找您的视图...如果您不调用 setContentView()
,它不会找到任何东西,而是 return null。希望它有意义:)
你可以这样做
public class main extends AppCompatActivity {
private TextView t;
private TextView A;
private TextView B;
private TextView C;
private TextView D;
private Button next_test;
private Button b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initialize();
}
private void initialize(){
t = (TextView) findViewById(R.id.Question);
A = (TextView) findViewById(R.id.AnswerA);
B = (TextView) findViewById(R.id.AnswerB);
C = (TextView) findViewById(R.id.AnswerC);
D = (TextView) findViewById(R.id.AnswerD);
next_test = (Button)findViewById(R.id.Next_Text);
b = (Button)findViewById(R.id.button);
}
在OnCreate
方法中声明它们
public class main extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_activity_layout);
TextView t = (TextView) findViewById(R.id.Question);
TextView A = (TextView) findViewById(R.id.AnswerA);
TextView B = (TextView) findViewById(R.id.AnswerB);
TextView C = (TextView) findViewById(R.id.AnswerC);
TextView D = (TextView) findViewById(R.id.AnswerD);
Button next_test = (Button)findViewById(R.id.Next_Text);
Button b = (Button)findViewById(R.id.button);
.....
}
您应该始终在 onCreate
方法中初始化它们并放在
setContentView(R.layout.your_activity_layout);