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

【Android開発】ListViewで2つの配列から共通要素を抽出する方法

このチュートリアルでは、AndroidアプリのListViewを使用して、2つの配列に含まれる共通要素(重複している値)を検出し、画面に表示する方法を解説します。

サンプルでは、2つの文字列型配列を比較し、両方に存在する要素だけをArrayListに格納して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>

このレイアウトでは、配列の値を一覧表示するための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;

public class MainActivity extends AppCompatActivity {
    ListView list;
    String[] names = new String[] { "A", "B", "C" };
    String[] extended = new String[5];

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list = findViewById(R.id.list);

        // extended配列の後半に要素を設定
        extended[3] = "D";
        extended[4] = "E";

        // names配列の内容をextended配列の先頭にコピー
        System.arraycopy(names, 0, extended, 0, names.length);

        // 共通要素を格納するリスト
        ArrayList<String> unique = new ArrayList<>();

        // 二重ループで2つの配列を比較し、共通要素を抽出
        for (int i = 0; i < names.length; i++) {
            for (int j = 0; j < extended.length; j++) {
                if (names[i].equals(extended[j])) {
                    unique.add(names[i]);
                }
            }
        }

        // 抽出した共通要素をListViewに表示
        ArrayAdapter adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, unique);
        list.setAdapter(adapter);
    }
}

コードの解説

このコードのポイントは以下の通りです。

  • 元となる配列「names」(A・B・C)と、それを拡張した配列「extended」を用意します。
  • System.arraycopy() を使って、names の内容を extended の先頭部分へコピーします。
  • 二重のforループで両配列の各要素を比較し、一致した値のみをArrayList「unique」に追加します。
  • 最後にArrayAdapterを通じて、共通要素をListViewに表示します。

なお、文字列の比較には == ではなく equals() メソッドを使用するのが安全です。== はオブジェクトの参照先を比較するため、意図しない結果になる場合があります。

アプリを実行してみよう

それでは、実際にアプリを起動して動作を確認しましょう。実機のAndroidスマートフォンをPCに接続しておいてください。Android Studioでプロジェクト内のアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックします。デバイス選択画面で接続中のスマートフォンを選択すると、端末に以下のような画面が表示されます。

【Android開発】ListViewで2つの配列から共通要素を抽出する方法

上記の実行結果のように、2つの配列に共通して含まれる要素「A」「B」「C」がListViewに一覧表示されます。これで、配列から共通要素を抽出してListViewで表示する処理は完成です。

  1. Androidで住所から緯度・経度を取得する方法【Geocoderクラスの使い方を徹底解説】

    この記事では、Androidアプリで入力された住所文字列から緯度(Latitude)と経度(Longitude)を取得する方法を解説します。Android標準のGeocoderクラスを利用することで、Google Maps APIキーなしでもジオコーディング(住所→座標変換)を実現できます。 実際に動作するサンプルアプリを題材に、レイアウトXML、Activity、Geocoder処理クラス、マニフェスト設定まで、ステップごとに丁寧に見ていきましょう。 全体の仕組み 本サンプルの処理の流れは以下の通りです。 ユーザーがEditTextに住所を入力する ボタンをタップすると、バックグラウンド

  2. AndroidスマホでAirTagを検出する方法|紛失タグの見つけ方を徹底解説

    Appleの「AirTag」は、鍵や財布、バッグなど、あらゆる持ち物の位置を追跡できる便利なアイテムとして近年急速に普及しています。しかし、その利便性の裏側では、知らないうちに自分の所持品へ取り付けられ、居場所を監視される「ストーカー行為」への懸念も高まっています。特にAndroidユーザーにとっては、iPhoneと比べて検知の仕組みが異なるため、注意が必要です。iPhoneやiPadをお使いの方なら、他人のAirTagが自分と一緒に移動している場合、デバイスに自動的にアラートが表示されます。ところがAndroidユーザーの場合、同じようにはいかず、いくつかの手順を踏まなければ、自分の持ち物に