1

次のプログラムは強制終了してクラッシュします。理由がわかりません。

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */

    TextView tv = (TextView) findViewById(R.id.text);
    Button btn1 = (Button) findViewById(R.id.button1);

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public void clicked(View v) {

        tv.setText(btn1.getText());
    }
}

しかし、移動した後

TextView tv = (TextView) findViewById(R.id.text);
Button btn1 = (Button) findViewById(R.id.button1);

クリックされた関数内で機能しますが、それはなぜですか?

助けてくれてありがとう..

4

2 に答える 2

6

findViewById()の後に呼び出す必要がありsetContentView()ます。そうしないと、常に null が返されます。

于 2012-06-28T16:39:10.967 に答える
5

次のコードを使用すると、機能し始めます。

null を返す onCreate() で setContentView() を使用する前に findViewById() を使用しています。

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
/** Called when the activity is first created. */

private TextView tv;
private Button btn1;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    tv = (TextView) findViewById(R.id.text);
    btn1 = (Button) findViewById(R.id.button1);
}

public void clicked(View v) {

    tv.setText(btn1.getText());
}
}
于 2012-06-28T16:42:24.600 に答える