SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Android Studio 2で始めるアプリ開発入門

Androidアプリ処理の基本 ~ Androidでよく使われる画面「ListView」

Android Studio 2で始めるアプリ開発入門 第6回


アクティビティ中でのリストデータ生成

 上記方法ではリストデータとしてstrings.xmlに記述された文字列リストを使用しました。この方法は、リストデータが固定の場合には有効ですが、リストデータが可変の場合、Javaで記述する必要があります。同じ定食メニューリストをアクティビティ中で生成するように改造してみましょう。

ソース改造

 まず、もともとstrings.xmlに記述されていた<string-array>タグは不要ですので削除してください(コメントアウトでもかまいません)。次に、activity_list_view_sample.xmlの<ListView>タグのandroid:entries属性を削除してください。

 その上で、ListViewSampleActivityのonCreate()メソッドに以下の内容を追記してください。

リスト7 リスナ設定
public class ListViewSampleActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
      ~省略~
        List<String> menuList = new ArrayList<String>(); // (1)
        menuList.add("から揚げ定食");
        menuList.add("ハンバーグ定食");
        menuList.add("生姜焼き定食");
        menuList.add("ステーキ定食");
        menuList.add("野菜炒め定食");
        menuList.add("とんかつ定食");
        menuList.add("ミンチかつ定食");
        menuList.add("チキンカツ定食");
        menuList.add("コロッケ定食");
        menuList.add("焼き魚定食");
        menuList.add("焼肉定食");

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(ListViewSampleActivity.this, android.R.layout.simple_list_item_1, menuList); // (2)
        listView.setAdapter(adapter); // (3)
    }
      ~省略~
}

 アプリを再起動し、動作確認を行ってください。改造前と同じ動きなのが分かるでしょう。

アダプタクラス

 上記のようにアクティビティ中でリストデータを生成する場合、以下の手順を取ります。それぞれ、リスト7中の番号に対応しています。

 (1)リストデータのListオブジェクト(か配列)を用意します。

 (2)上記リストデータをもとにアダプタオブジェクトを生成します。これはAdapterインターフェースを実装したクラスを利用します。よく使われるのは、以下の3種です。それぞれ元となるデータが違います。

  • ArrayAdapter:元データとしてList(配列)を利用するアダプタクラス。
  • SimpleAdapter:元データとしてList<Map<string,?>>を利用するアダプタクラス。XMLファイルの解析結果を格納するのに便利。
  • SimpleCursorAdapter:元データとしてCursorオブジェクトを利用するアダプタクラス。Cursorオブジェクトは、Android端末内のDBを利用する際、SELECT文の結果が格納されたもの。

 今回は、定食リストをListで生成していますので、ArrayAdapterを利用しています。このクラスをnewする際、引数が3個必要です。

 引数1はコンテキストです。上述の通り、「アクティビティクラス名.this」を記述します。

 引数2はリストビューの各行のレイアウトを表すR値です。上述の通り、ListViewは各行に様々な画面部品を埋め込むことができます。これは、それ専用のレイアウトxmlファイルを作ることで実現できます。レイアウトxmlファイルを作成するということはR値が存在します。このR値を指定します。ただ、1行や2行程度のシンプルなレイアウトの場合、Android SDKでもともと用意されています。その中で1行を表すのが、

android.R.layout.simple_list_item_1

です。

 引数3はリストデータそのものです。

[Note]android.R

 前回解説しましたが、アプリ中のリソースはR値が生成され、Rクラスに記述されます。ところが、Android SDKで用意されたリソースも存在します。これにもR値が存在します。これが記述されたクラスが「android.R」です。アプリ内の独自のRクラスとクラス名が同じですので、android.Rクラスをインポートした場合、独自のRクラスが読み込まれなくなります。したがって、android.Rクラスは絶対にインポートせず、android.RのR値を利用する場合は、

android.R.layout.simple_list_item_1

のように、記述します。

 (3)ListViewにアダプタオブジェクトをセットします。これは、ListViewのsetAdapter()メソッドを利用します。

 基本はこの方法でアクティビティ中でListViewが生成できます。あとは、アダプタクラスとして、どのクラスを生成するのか、生成の際に引数としてどのようなものを渡していくのか、という理解が必要になってきます。

 今後も連載中にさまざまなListViewの生成方法と、アダプタクラスの使い方を紹介していこうと思います。

まとめ

 今回は、ListViewのイベントとリスナについて、および、アクティビティ中でリストデータを生成する方法について解説しました。ListViewは奥が深く、さまざまな可能性があります。連載を通じて、いくつか紹介していこうと思います。

 次回は、Androidの画面遷移とその中心的な役割をするインテントを紹介します。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Android Studio 2で始めるアプリ開発入門連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 齊藤 新三(サイトウ シンゾウ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。Web系製作会社のシステム部門、SI会社を経てフリーランスとして独立。屋号はSarva(サルヴァ)。HAL大阪の非常勤講師を兼務。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/9528 2018/05/23 15:36

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー