在 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);