Androidで不変リストを作成する方法|Collections.unmodifiableListの使い方
本記事では、Androidアプリ開発において不変(イミュータブル)リストを作成する方法を、サンプルコードとともに詳しく解説します。Javaでは Collections.unmodifiableList() というファクトリメソッドを使うことで、後から要素の追加・削除・変更ができない読み取り専用のリストを簡単に生成できます。
ステップ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="100dp"
tools:context=".MainActivity">
<ListView
android:id="@+id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ListView>
</LinearLayout>
上記のレイアウトでは、不変リストの内容を画面に表示するための ListView を配置しています。
ステップ3:MainActivity.javaの実装
src/MainActivity.java に以下のコードを記述します。
package com.example.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class MainActivity extends AppCompatActivity {
ListView list;
String[] mobileArray = {"Android","IPhone","WindowsMobile","Blackberry", "WebOS","Ubuntu","Windows7","Max OS X"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = findViewById(R.id.list);
// 配列から可変リストを作成
List<String> list1 = new ArrayList<>(Arrays.asList(mobileArray));
// ファクトリメソッドで読み取り専用リストに変換
List<String> readOnlylist = Collections.unmodifiableList(list1);
String[] array = new String[readOnlylist.size()];
ArrayAdapter adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, readOnlylist.toArray(array));
list.setAdapter(adapter);
}
}
コードのポイント
Arrays.asList()で配列からリストを生成し、ArrayListでラップしています。Collections.unmodifiableList()を呼び出すことで、元のリストを読み取り専用のビューとしてラップした不変リストを取得できます。- この不変リストに対して
add()やremove()を呼び出すと、UnsupportedOperationExceptionがスローされるため、データの意図しない変更を防げます。
アプリの実行と結果確認
それでは、実際にアプリケーションを実行してみましょう。実機のAndroid端末をPCに接続していることを確認してください。Android Studioでアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックします。表示された選択肢から接続中のモバイルデバイスを選択すると、端末の画面に以下のようにOS名の一覧が表示されます。

このように、Collections.unmodifiableList() を使えば、ListViewなどに渡すデータを安全に保護できます。設定値や固定データなど、変更されるべきでないリストを扱う際にぜひ活用してください。
プロジェクトのコードはこちらからダウンロードできます。
-
Androidでカスタム通知レイアウトとテキストの色を作成する方法を徹底解説
このチュートリアルでは、Androidアプリにおいて標準的な通知と、RemoteViewsを使ったカスタム通知レイアウトの両方を作成する方法を、サンプルコード付きでわかりやすく解説します。カスタムレイアウトを活用すれば、通知のデザインやテキストの色などを自由にコントロールできるようになります。 全体の流れ 本記事の手順は以下の通りです。 Android Studioで新規プロジェクトを作成する メイン画面のレイアウト(activity_main.xml)を用意する MainActivity.javaに通知の生成処理を実装する 通知・カスタム通知・通知内容表示用のレイアウトXMLを作成する A
-
Androidアプリでフラグメントからアクティビティのメソッドを呼び出す方法【サンプルコード付き】
このチュートリアルでは、Androidアプリにおいてフラグメントからアクティビティのメソッドを呼び出す実装方法を解説します。フラグメントは単体では動作せず、必ずアクティビティ上に存在するため、getActivity()で親アクティビティの参照を取得し、適切な型にキャストすることで、アクティビティのpublicメソッドを直接呼び出すことができます。 実装手順 ステップ1:新規プロジェクトの作成 Android Studioで新しいプロジェクトを作成します。メニューから「File」⇒「New Project」を選択し、必要な項目をすべて入力してプロジェクトを作成しましょう。 ステップ2:activ