Android
 Computer >> コンピューター >  >> プログラミング >> Android

AndroidのListViewでネストされた(2次元)配列を表示する方法【サンプルコード付き】

この記事では、AndroidアプリのListViewを使って、ネストされた(多次元)配列の値を画面に表示する方法を、実際のコード例とともにわかりやすく解説します。2次元配列のデータを1つのリストとして展開して表示する基本的な手法をマスターしましょう。

全体の流れ

今回作成するのは、2次元配列に格納された複数の文字列データをListViewに展開して一覧表示するシンプルなアプリです。手順は以下の通りです。

  1. Android Studioで新規プロジェクトを作成する
  2. レイアウトファイル(activity_main.xml)にListViewを配置する
  3. MainActivityでネストされた配列を展開し、Adapter経由でListViewにセットする

ステップ1:新規プロジェクトの作成

まず、Android Studioを起動し、メニューから「File → New Project」を選択して新しいプロジェクトを作成します。必要な項目(プロジェクト名、パッケージ名、保存先など)をすべて入力してプロジェクトを完成させてください。

ステップ2:レイアウトファイルの編集

次に、res/layout/activity_main.xml に以下のコードを追加します。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:layout_marginTop="30dp"
    tools:context=".MainActivity">
    <ListView
        android:id="@+id/list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </ListView>
</LinearLayout>

このコードでは、ルート要素として垂直方向のLinearLayoutを配置し、その中に配列の値を表示するためのListViewを1つ設置しています。IDは list としており、後ほどJavaコードから参照します。

ステップ3:MainActivity.java の実装

続いて、src/MainActivity.java に以下のコードを記述します。

package com.example.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class MainActivity extends AppCompatActivity {
    ListView list;
    String[][] deepArr = new String[][] {{"Sai", "Gopal"}, {"Pallavi", "Priya"}};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list = findViewById(R.id.list);
        ArrayList<String> arrayList = new ArrayList<String>();
        for(String[] s:deepArr) {
            for(String s1:s)
                arrayList.add(s1);
        }
        ArrayAdapter adapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_1, arrayList);
        list.setAdapter(adapter);
    }
}

コードのポイント

  • deepArr:表示したいデータを持つ2次元配列です。ここでは {"Sai", "Gopal"} と {"Pallavi", "Priya"} の2組の文字列が格納されています。
  • 二重のfor文による展開:外側のfor文で各行(String配列)を取り出し、内側のfor文で各要素を順番にArrayListへ追加することで、ネストされた配列をフラットなリストに変換しています。
  • ArrayAdapter:Android標準のレイアウト android.R.layout.simple_list_item_1 を使い、変換したArrayListをListViewにバインドしています。

アプリの実行

それでは、実際にアプリを実行してみましょう。実機のAndroidスマートフォンをPCに接続していることを前提に説明します。

  1. Android Studioでプロジェクト内の任意のアクティビティファイルを開きます。
  2. ツールバーの実行(Run)アイコンをクリックします。
  3. 接続中のモバイルデバイスを選択します。

すると、接続した端末の画面にアプリが起動し、次のような結果が表示されます。

AndroidのListViewでネストされた(2次元)配列を表示する方法【サンプルコード付き】

実行結果の確認

上記の実行結果のとおり、2次元配列に格納されていた「Sai」「Gopal」「Pallavi」「Priya」という4つの値が、ネスト構造から展開され、ListViewの各行に正しく一覧表示されていることが確認できます。

このように、二重ループでネストされた配列を展開してArrayListに詰め替えれば、標準のArrayAdapterだけで簡単に多次元データをリスト表示できます。JSONレスポンスなど階層構造を持つデータを扱う際にも応用できるテクニックなので、ぜひ覚えておきましょう。

  1. AndroidのFragmentでコンテキスト(Context)を取得・使用する方法を徹底解説

    はじめに この記事では、Androidアプリ開発においてフラグメント(Fragment)内でコンテキスト(Context)を取得して使用する方法を、実際のサンプルコードとともにステップごとにわかりやすく解説します。 フラグメントは単体では動作せず、必ず親となるアクティビティ(Activity)に紐づいて実行されます。そのため、フラグメント内でコンテキストが必要な場面では、getActivity()メソッドなどを使って親アクティビティのコンテキストを取得するのが基本の考え方です。 手順1:新しいプロジェクトを作成する Android Studioを起動し、メニューから「File」→「New

  2. AndroidのツールバーでSearchViewを実装する方法【ステップ解説】

    はじめに 本記事では、Androidアプリのツールバー(Toolbar)にSearchViewを組み込み、リストの絞り込み検索機能を実装する方法を、ステップバイステップで解説します。サンプルとして月名の一覧をListViewに表示し、SearchViewに入力したキーワードでリアルタイムに検索結果をフィルタリングする仕組みを作ります。 手順1:新規プロジェクトの作成 まず、Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成しましょう。 手順2:レイアウトファイルの編集 次に、res/lay