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

【Android】Spinnerの選択項目を位置ではなく「値」で設定する方法

本記事では、Androidアプリ開発においてSpinner(スピナー)の選択項目を、リスト上の位置(インデックス)ではなく値を基準に設定する方法を解説します。ボタンをタップするとスピナーの選択項目が自動的に切り替わる、シンプルなサンプルアプリを題材に、手順を追って説明していきます。

ステップ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"
   xmlns:tools="https://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:padding="16dp"
   tools:context=".MainActivity">
   <Button
      android:id="@+id/button"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerInParent="true"
      android:onClick="SelectSpinnerValue"
      android:text="Select Cristiano Ronaldo" />
   <Spinner
      android:id="@+id/spinner"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_below="@id/button"
      android:layout_centerInParent="true"
      android:layout_marginTop="10dp" />
   <TextView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_marginTop="40dp"
      android:text="Set selected item of Spinner by value instead of by position on Android"
      android:textAlignment="center"
      android:textSize="24sp"
      android:textStyle="bold|italic" />
</RelativeLayout>

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

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

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MainActivity extends AppCompatActivity {
   Spinner spinner;
   String[] FootBallPlayers = new String[]{"Lionel Messi", "Eden Hazard", "Cristiano Ronaldo", "Neymar Jr", "Gareth Bale", "David Bekham"};
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      spinner = findViewById(R.id.spinner);
      final List<String> plantsList = new ArrayList<>(Arrays.asList(FootBallPlayers));
      final ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<>(this, R.layout.support_simple_spinner_dropdown_item, plantsList);
      spinnerArrayAdapter.setDropDownViewResource(R.layout.spinner_value);
      spinner.setAdapter(spinnerArrayAdapter);
   }
   public void SelectSpinnerValue(View view) {
      spinner.setSelection(2);
   }
}

ポイントは SelectSpinnerValue() メソッドです。setSelection(2) を呼び出すことで、リストの3番目(インデックス2)にあたる「Cristiano Ronaldo」を選択状態にしています。

ステップ4:ドロップダウン用レイアウト(spinner_value.xml)の作成

レイアウトリソースファイルとして spinner_value.xml を新規作成し、以下のコードを記述します。スピナーのドロップダウン表示のスタイルを定義しています。

<?xml version="1.0" encoding="utf-8"?>
<TextView
   xmlns:android="https://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:padding="10dp"
   android:textStyle="italic"
   android:fontFamily="sans-serif-medium" />

ステップ5: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>

応用編:値からインデックスを取得して選択する

「リストの並び順に依存せず、値を指定して選択したい」という場合は、アダプターの getPosition() を使うのが便利です。以下のように書き換えることで、値に対応するインデックスを自動的に検索して選択できます。

public void SelectSpinnerValue(View view) {
   @SuppressWarnings("unchecked")
   ArrayAdapter<String> adapter = (ArrayAdapter<String>) spinner.getAdapter();
   int index = adapter.getPosition("Cristiano Ronaldo");
   if (index >= 0) {
      spinner.setSelection(index);
   }
}

この方法であれば、将来的にリストの順序が変更されても、常に正しい項目を選択できるため、より堅牢な実装になります。

アプリの実行

それでは、アプリケーションを実行してみましょう。実機のAndroidスマートフォンがパソコンに接続されているものとします。Android Studioからアプリを起動するには、プロジェクト内のいずれかのアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックします。デバイス選択画面で接続したモバイル端末を選択すると、端末側に以下のような初期画面が表示されます。

【Android】Spinnerの選択項目を位置ではなく「値」で設定する方法

  1. Android RecyclerViewで選択したアイテムを適切にハイライト表示する方法【初心者向け完全ガイド】

    はじめにこの記事では、Androidアプリ開発においてRecyclerViewで選択されたアイテムを適切に強調表示(ハイライト表示)する方法を、ステップごとのサンプルコード付きで詳しく解説します。リスト形式のUIは多くのアプリで使われており、ユーザーがどの項目を選んだかを視覚的に分かりやすくすることは、使いやすいアプリを作る上で非常に重要なポイントです。Step 1:新規プロジェクトの作成と依存関係の追加まずAndroid Studioで新しいプロジェクトを作成します。File → New Project を選択し、必要な情報を入力してプロジェクトを作成しましょう。次に、build.gradl

  2. AndroidでVPNを設定する方法【専用アプリ・OpenVPNの手順を徹底解説】

    モバイルデバイスでのブラウジングをもっと安全にしたいと思いませんか?それとも、Netflixの地域制限を回避したいだけでしょうか?VPN(仮想プライベートネットワーク)はそのどちらにも最適な選択肢です。では、AndroidでもVPNを設定できるのでしょうか? この記事では、AndroidデバイスにモバイルVPNをインストールして使う方法、そしてどのVPNを選ぶべきかについて詳しく解説します。さらに、スマートフォンでVPNの使用を避けるべき場面についても触れていきます。 なぜモバイルでVPNを使うのか? VPNといえば、デスクトップPCやルーター向けのツールというイメージが強いかもしれません。で