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

AndroidのListViewに要素を動的に追加する方法をわかりやすく解説

はじめに

この記事では、AndroidアプリのListViewに対して、ユーザーの入力をもとに要素を動的に追加する方法を解説します。EditTextにテキストを入力してボタンをタップすると、その内容がListViewに即座に反映されるシンプルなサンプルを通して、Adapterとデータリストの基本的な連携方法を学びましょう。

実装の全体像

作業は以下の4ステップで進めます。

  1. Android Studioで新規プロジェクトを作成する
  2. res/layout/activity_main.xml にレイアウトを定義する
  3. src/MainActivity.java に処理を実装する
  4. AndroidManifest.xml を確認する

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

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

ステップ2:レイアウトファイル(activity_main.xml)の編集

res/layout/activity_main.xml に以下のコードを記述します。画面には、テキスト入力用の「EditText」、追加を実行する「Button」、一覧表示用の「ListView」の3つのUI部品を縦方向に配置しています。

<RelativeLayout 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"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/button1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editText1"
        android:layout_centerHorizontal="true"
        android:text="Add Values to listView" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="26dp"
        android:ems="10"
        android:hint="Add elements listView" />

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button1"
        android:layout_centerHorizontal="true" >
    </ListView>
</RelativeLayout>

各部品の役割

  • EditText: 追加したいテキストを入力する欄です。hint属性により、未入力時にはガイド用の文字列が表示されます。
  • Button: タップすると、EditTextに入力した内容をListViewへ追加します。
  • ListView: 登録済みの要素が一覧形式で表示される領域です。

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

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

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

public class MainActivity extends Activity {

    ListView listview;
    Button addButton;
    EditText GetValue;
    String[] ListElements = new String[] {
        "Android",
        "PHP",
        "Python",
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listview = findViewById(R.id.listView1);
        addButton = findViewById(R.id.button1);
        GetValue = findViewById(R.id.editText1);

        final List<String> ListElementsArrayList = new ArrayList<>(Arrays.asList(ListElements));
        final ArrayAdapter<String> adapter = new ArrayAdapter<>
        (MainActivity.this, android.R.layout.simple_list_item_1, ListElementsArrayList);
        listview.setAdapter(adapter);

        addButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ListElementsArrayList.add(GetValue.getText().toString());
                adapter.notifyDataSetChanged();
            }
        });
    }
}

コードのポイント

  • 初期データとして「Android」「PHP」「Python」の3要素を用意し、Arrays.asList()でArrayListに変換しています。動的な追加・削除を行う場合は、固定長の配列ではなくArrayListを使うのがポイントです。
  • ArrayAdapterを生成し、setAdapter()でListViewにセットすることで、データとUIが紐付きます。
  • ボタンがクリックされると、EditTextの入力値をArrayListに追加し、adapter.notifyDataSetChanged()を呼び出して画面の表示を更新しています。

特に重要なのがnotifyDataSetChanged()の呼び出しです。単にデータリストの中身を変更しただけではListViewの表示は更新されないため、必ずこのメソッドでアダプターに変更を通知する必要があります。

ステップ4:AndroidManifest.xmlの確認

androidManifest.xml は以下のようになります。新規プロジェクト作成時に自動生成された内容をそのまま利用できるため、通常は編集不要です。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

アプリを実行して動作を確認しよう

それではアプリを実行してみましょう。実機のAndroid端末をPCに接続している場合は、プロジェクトのアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックします。接続した端末を選択して実行すると、まず次のような初期画面が表示されます。

AndroidのListViewに要素を動的に追加する方法をわかりやすく解説

EditTextに任意の文字列を入力してボタンをタップすると、入力したテキストがListViewの末尾に追加されます。

AndroidのListViewに要素を動的に追加する方法をわかりやすく解説

まとめ

ListViewへの動的な要素追加は、「ArrayListなどのデータリストを更新する → notifyDataSetChanged()で変更を通知する」という流れさえ押さえておけば、簡単に実装できます。なお、近年のAndroid開発では、より柔軟で高性能なRecyclerViewの使用が推奨されています。まずはListViewの基本を理解したうえで、RecyclerViewやJetpack ComposeのLazyColumnにも挑戦してみると、さらにスキルアップにつながるでしょう。

  1. 【Android】ボタン操作でビュー(View)を動的に追加・削除する方法

    このチュートリアルでは、Androidアプリの実行時にビュー(入力フィールド)を動的に追加・削除する方法を、サンプルコードとともに段階的に解説します。「連絡先の電話番号をいくつでも登録できるフォーム」のように、ユーザー操作に応じて入力欄を自由に増減させたい場合に非常に役立つテクニックです。 ステップ1:Android Studioで新規プロジェクトを作成する Android Studioを起動し、メニューから「File」→「New Project」を選択して、必要な項目を入力して新しいプロジェクトを作成します。 ステップ2:res/layout/activity_main.xml にコードを追

  2. 【Android開発】ListViewのリサイクル(ビュー再利用)メカニズムの仕組みと実装例を解説

    はじめにAndroidアプリで大量のデータをリスト表示する際、パフォーマンスを維持するために欠かせないのが「リサイクル(ビューの再利用)メカニズム」です。本記事では、実際のコード例を通じて、リサイクルの仕組みがどのように機能するのかを段階的に解説します。なお、現代のAndroid開発ではListViewの後継としてRecyclerViewが標準的に使われており、RecyclerViewはListViewのリサイクルの考え方をさらに発展させたものです。ここではRecyclerViewを使った実装例で、その動作を確認していきます。リサイクルメカニズムとは?画面に表示しきれないほど多くの項目を持つリ