1. TOPTOP
  2. Webサービス
  3. Android

Androidアプリ開発のコードをJavaの文法に沿って解説を加えてみた(文字列リストの表示)。Genericsとかクラス型変数について

|

java_for_android

android_generics1

上の画像はAndroidアプリ開発で、単純に文字列のリストを表示させたものです。

表示をさせるために、javaファイルが必要となるわけですが、javaを学習したことのない初心者(自分)にとって、読んで理解するだけでも結構難しく感じます。

そこで今回は、リストを表示させるために使用したコードについて、Javaの文法よりに解説をしたいと思います。

文字列を表示させるためのjavaファイルのコード

今回の記事の前提となる、javaファイルのコードです。15行目から23行目のコードについて、解説を加えていきます。

package edu.self.myliistview5;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // データを準備
        String [] prefs = {"Osaka", "kyoto", "Hyogo"};

        // Adapterを準備
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_pref1, prefs);

        // ListViewにAdapterを設置
        ListView myListView = (ListView) findViewById(R.id.myListView);
        myListView.setAdapter(adapter);

    }

}

String型の配列を宣言(16行目)

String[] prefs = {"Osaka, "kyoto", "Hyogo"};

構成要素型はString型の配列で、構成要素は{“Osaka, “Kyoto”, “Hyogo”}の3つ。

class(クラス)のあとの山かっこ(19行目)

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, items);

Javaをちゃんと学習したことのない自分にとって、最も理解に苦しんだのがここです。なぜクラスの後に<>(山かっこ)が来るのか?

Generics(ジェネリクス)と型変数

これはJavaのGenericsという考え方で、型を変数化しているためです。こちらのサイト(新しいタブで開く)でGenericsについて、詳しく説明されているので一部引用させてもらいます。

Generics はクラスの定義内で用いられる型を変数化することで、インスタンスを作成するときまで具体的な型を抽象的に表現し、インスタンス生成時に具体的な型を指定します。
(中略)
Genericsの概念は、型宣言で指定される型パラメータリスト (Type parameter) と、型パラメータリストで宣言される型変数 (Type variable) で構成されます。

Genericsの使い方(22行目)

Genericsは、具体的に次のように使います。

new GenericsTest <String>();

パラメータ化された型をインスタンス化するとき

GenericsTest <String> obj = new GenericsTest <String>();

パラメータ化された型のインスタンスを変数に保存するとき

クラス型変数にメソッドの返り値を代入(23,24行目)

ListView myListView = (ListView) findViewById(R.id.myListView);

ListViewクラスのmyListView(クラス型変数)に、ListView型でキャストしたfindViewByIdメソッドの返り値を代入します。

myListView.setAdapter(adapter);

クラス型変数myListViewを、”.”(ドット演算子)を使って、adapterを引数としたsetAdapterメソッドを呼び出します。

〔参考サイト〕