Tips

Android ユーザーインターフェースの基礎 【Android TIPS】

 

どちらの場合も、実行結果はこのようになります。

ルートとしてLinearLayoutが、その子供にTextViewとButtonが配置されている。Buttonはクリックしても反応しません。

Viewのインスタンス化
ここでは、レイアウトXMLファイル上に定義したView(TextViewやButton等)をJavaプログラムから参照し、インスタンス化する方法を紹介します。

 

たとえば、「ButtonをクリックするとTextViewに表示されている文字列が変わる」などJavaプログラムから画面上に配置されているViewを操作するにはまず、その対象となるViewをインスタンス化する必要があります。
ActivityとレイアウトXMLファイルの紐づけにはリソースIDを使用しました。
同じようにレイアウトXMLファイル内で定義したView要素をJavaプログラム中から参照するにもリソースIDを使用します。

 

レイアウトXMLに定義されているViewにリソースIDを付与するには、「android:id」属性を使用します。
リソースID は「android:id」属性で定義した値の「@+id/」以降となります。

<TextView android:id="@+id/textView1" android:text="TextView" />

この例では、TextViewにリソースID「textView1」を付けました。

 

次に、JavaプログラムでレイアウトXMLファイルで定義されているViewをインスタンス化するには、ActivityクラスのfindViewById()メソッドを使用します。
以下はfindViewById()メソッドのシグネチャです。引数にはXMLで定義したリソースIDを指定します。

public View findViewById (int id)
 

このメソッドは戻り値にViewを返すため、適切にキャストしてあげる必要があります。
以下のように使用します。

TextView textView = (TextView)findViewById(R.id.textView1);

引数のリソースIDには「R.id.textView1」が指定されています。「R.id.」という部分がView(この場合はTextView)に指定したリソースIDであることを表し、「textView1」の部分がレイアウトXMLファイルに定義したTextViewタグの「android:id=@+id/」以降を表します。

 

なお、このメソッドの実行はsetContentView()メソッドを実行した後に行う必要があります。
これは、あらかじめActivityとレイアウトXMLの紐づけを行っておかないと、指定したリソースIDのViewを見つけることができないためです。
仮にsetConentView()メソッドの実行前にfindViewById()メソッドを実行してしまうと、findViewById()メソッドの実行結果がnullとなり、結果的にNullPointerExceptionが発生してアプリケーションが強制終了してしまうことになります。

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // NG 変数textViewがnullとなってしまうため
        // TextView textView = (TextView) findViewById(R.id.textView1);
        setContentView(R.layout.activity_main);
        TextView textView = (TextView) findViewById(R.id.textView1); // OK
    }
}

このようにsetContentView()メソッドを使った紐付けとfindViewById()メソッドを使ったインスタンス化は処理の順番に気を付けてください。

Androidアプリ開発の必須知識!JAVAプログラミングを学べる連載リンク

はじめてのJAVA 連載

Android 概要 【Android Tips】
Android ユーザーインターフェース応用 ウィジェット TextView,EditText 【Android Tips】
一覧へ戻る

Recent News

Recent Tips

Tag Search