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. KotlinでAndroid開発!クラスを使いこなす

  2. ListViewとArrayAdapterを用いたAndroid…

  3. Ionicでモバイルアプリを作ろう!(10)ボタンの表示・カスタ…

  4. AndroidTips | LIstActivityを作る2通り…

  5. Android Design Support libraryを使…

おすすめ記事

  1. CSS3

    CSS練習問題 第12回

  2. CSS3

    CSS練習問題 第11回

  3. CSS3

    CSS練習問題 第10回

  4. 【Linux】CentOS8をインストールしてみた。【VM】

  5. CSS3

    CSS練習問題 第9回

カテゴリー

TECH PJIN著書

PAGE TOP