为什么必须在方法内部使用findViewById命令?

时间:2019-01-06 11:24:39

标签: java android

我正在从事活动交流。

这是我的main2activity类:

public class Main2Activity extends AppCompatActivity {
TextView textView ;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    textView =(TextView) findViewById(R.id.textView2);
    Intent intent = getIntent();
    String received = intent.getStringExtra("input");

    textView.setText(received);
}
protected void changeActivity(View view){

    Intent intent = new Intent(getApplicationContext(),MainActivity.class);
    startActivity(intent);

}}

我在mainActivity使用editText。在editText上写一些比

protected void changeActivity(View view){

    userInput = findViewById(R.id.editText);
    Intent intent = new Intent(getApplicationContext(),Main2Activity.class);

    intent.putExtra("input",userInput.getText().toString());

    startActivity(intent);

}

Mainactivity buttoncommand像这样按下按钮并发送我在editText上写的内容。但是我不明白。如果我将位置textView =(TextView) findViewById(R.id.textView2);更改为该方法之外的代码。我在课堂上使用它。像这样

public class Main2Activity extends AppCompatActivity {
TextView textView =(TextView) findViewById(R.id.textView2);


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    Intent intent = getIntent();
    String received = intent.getStringExtra("input");

    textView.setText(received);
}
protected void changeActivity(View view){

    Intent intent = new Intent(getApplicationContext(),MainActivity.class);
    startActivity(intent);

}}

应用程序无法在模拟器上运行,我在editText上写了点东西,然后单击按钮,应用程序出错了。我不明白现实(对于真正的智能手机不是模拟器)是真的吗?现实不起作用。为什么我的错误是什么?

1 个答案:

答案 0 :(得分:3)

您可以在findViewById()之后致电setContentView() 因为android在xml中加载了setContentView()

然后您可以使用findViewById()