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

【Android】ListViewを動的に更新する方法をサンプルコード付きで解説

本記事では、AndroidアプリでListViewを動的に更新する方法を、実際に動作するサンプルコードとともに解説します。「EditTextに入力したアイテムをボタンタップでリストに追加し、画面へ即座に反映する」という定番のユースケースを通じて、動的更新の基本をマスターしましょう。

動的更新のカギは notifyDataSetChanged()

ListViewにデータを追加・削除しても、単にArrayListを操作しただけでは画面は変わりません。データ変更後にnotifyDataSetChanged()を呼び出すことで、アダプターが変更を検知し、ListViewが再描画されます。これが動的更新における最も重要なポイントです。

実装手順

ステップ1:新規プロジェクトを作成する

Android Studioで「File」→「New Project」を選択し、必要な情報を入力して新しいプロジェクトを作成します。

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

res/layout/activity_main.xml に以下のコードを記述します。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="4dp"
    android:orientation="vertical" >
    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="text"
        android:hint="Enter an item here" />
    <Button
        android:id="@+id/btnAdd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Add item"
        android:layout_below="@id/editText" />
    <ListView
        android:id="@+id/listView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/btnAdd" />
</RelativeLayout>

このレイアウトでは、画面上部に入力用のEditText、その下に追加用のButton、さらにその下に結果を一覧表示するListViewを縦方向に配置しています。

ステップ3:MainActivity.java を実装する

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

import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import java.util.ArrayList;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
    EditText editText;
    Button button;
    ListView listView;
    ArrayList<String> list = new ArrayList<>();
    ArrayAdapter<String> adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = findViewById(R.id.btnAdd);
        listView = findViewById(R.id.listView);
        editText = findViewById(R.id.editText);
        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, list);
        View.OnClickListener onClickListener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                list.add(editText.getText().toString());
                editText.setText("");
                adapter.notifyDataSetChanged();
            }
        };
        button.setOnClickListener(onClickListener);
        listView.setAdapter(adapter);
    }
}

処理の流れは以下の通りです。

  • ArrayAdapterを使って、データ源であるArrayListとListViewを連結します。
  • ボタンがクリックされると、EditTextの入力内容をリストに追加します。
  • 入力欄をクリアした後、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に接続しているものとして説明します。Android Studioでプロジェクト内の任意のアクティビティファイルを開き、ツールバーのRunアイコン【Android】ListViewを動的に更新する方法をサンプルコード付きで解説をクリックしてください。接続したモバイルデバイスを選択して実行すると、端末に以下のような初期画面が表示されます。

【Android】ListViewを動的に更新する方法をサンプルコード付きで解説

テキストを入力して「Add item」ボタンをタップすると、入力した内容がリアルタイムにListViewへ追加されていくのが確認できます。

まとめ

ListViewを動的に更新するための基本手順は、次の3ステップです。

  1. データ源となるArrayListを用意し、ArrayAdapter経由でListViewにセットする
  2. ユーザー操作などに応じてArrayListの中身を変更する
  3. 変更後にnotifyDataSetChanged()を呼び出して再描画を促す

なお、近年のAndroid開発ではRecyclerViewやJetpack ComposeのLazyColumnが採用される場面が増えていますが、アダプターとデータ連携の仕組みを理解するうえで、ListViewは今なお学習価値の高いコンポーネントです。まずは本記事のサンプルで基本をしっかり押さえておきましょう。

  1. AndroidのAlertDialogにListViewを表示する方法を徹底解説

    この記事では、AndroidのAlertDialog(アラートダイアログ)の中にListViewを表示する方法を、実際に動作するサンプルコードとともに段階的に解説します。ボタンをタップするとダイアログが開き、国名の一覧がリスト形式で表示されるシンプルなアプリを構築していきます。 手順1:新規プロジェクトの作成 Android Studioを起動し、メニューから「File」⇒「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成してください。 手順2:activity_main.xmlにコードを追加 res/layout/activity_main.xm

  2. Androidでボタンを動的に追加する方法をステップ解説

    この記事では、Androidアプリの実行時にJavaコードからボタンを動的に生成・追加する方法を、実際のコード例とともにわかりやすく解説します。XMLレイアウトにあらかじめボタンを配置するのではなく、プログラム内で新しいButtonインスタンスを作成し、画面に反映させる流れを学びましょう。手順1:Android Studioで新規プロジェクトを作成するまずAndroid Studioを起動し、メニューから「File」→「New Project」を選択して新しいプロジェクトを作成します。必要な項目(プロジェクト名、パッケージ名、保存先など)をすべて入力してプロジェクトを完成させてください。手順2