activity_main.xmlが読み込まれるより前にインスタンスを代入しようとすると失敗する
android studioのtextViewやButtonのフィールドへインスタンス代入する構文をonCreate()メソッドよりも前に書いてしまうと失敗するという話です。
public class MainActivity extends AppCompatActivity { List list = new ArrayList(Arrays.asList(1,2,3,4)); Button button; TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button1); textView = (TextView) findViewById(R.id.textView); for(int i : list){ textView.setText("hello"); } button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { textView.setText("ボタンがタップされました"); button.setEnabled(false); } }); } }
これは問題のないコードですが例えば、Buttonフィールドの宣言部を
Button button = (Button) findViewById(R.id.button1);
としてしまうと失敗します。ウィジェットのインスタンス代入はonCreate()メソッドで行う必要があるようです。またjavaのメンバーのアクセス修飾子はとくに設定しなかった場合はデフォルトの修飾子というものになるようです。その点を詳しく解説したサイトを発見しましたのでリンクを貼り付けておきます。
Javaのアクセス修飾子―public、protected、private、デフォルトなど
またフィールドを宣言したが、フィールドに値を設定しなかった場合はNullPointerExceptionというエラーが発生します。
コメント