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

この記事は2013年4月9日に書かれたものです。内容が古い可能性がありますのでご注意ください。


 

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

ルートとして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()メソッドを使ったインスタンス化は処理の順番に気を付けてください。

ページ:
1 2

3

関連記事

  1. ProgressDialogとEditTextとButtonを用…

  2. Androidアプリの4大要素 ContentProvider …

  3. 【Windows】AndroidStudio日本語化計画【201…

  4. 【新機種】docomo 2015-2016冬春モデル【紹介】その…

  5. Android アプリケーションの公開 公開手順 【Androi…

おすすめ記事

  1. 【XAMPP】MariaDBの日本語化【文字化け対策】

  2. java

    Java 8 練習問題 上級編 その15

  3. java

    Java 8 練習問題 上級編 その14

  4. java

    Java 8 練習問題 上級編 その13

  5. java

    Java 8 練習問題 上級編 その12

カテゴリー

TECH PJIN著書

PAGE TOP