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

Android KotlinでSearchViewを使う方法!ListViewの検索機能を実装する手順を解説

はじめに

この記事では、Androidアプリ開発においてKotlinでSearchView(検索ビュー)を実装する方法を、ステップごとにわかりやすく解説します。SearchViewを活用すると、ListViewに表示したデータの中から、ユーザーが入力したキーワードに一致する項目をリアルタイムに絞り込んで表示できるようになります。

Step 1:新規プロジェクトを作成する

Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成しましょう。

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

res/layout/activity_main.xml に以下のコードを追加します。ここでは、画面上部にSearchViewを配置し、その下にListViewを置く構成にしています。

<?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"
    tools:context=".MainActivity">
    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/searchView"
        android:divider="#ad5"
        android:dividerHeight="2dp" />
    <SearchView
        android:id="@+id/searchView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:iconifiedByDefault="false"
        android:queryHint="Search Here" />
</RelativeLayout>

iconifiedByDefault="false" を指定することで、SearchViewが最初から展開された状態になり、queryHint で検索ボックスに表示されるヒントテキストを設定できます。

Step 3:MainActivity.kt を実装する

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

import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.ListView
import android.widget.SearchView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
    lateinit var searchView: SearchView
    lateinit var listView: ListView
    lateinit var list: ArrayList<String>
    lateinit var adapter: ArrayAdapter<*>
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"
        searchView = findViewById(R.id.searchView)
        listView = findViewById(R.id.listView)
        list = ArrayList()
        list.add("Apple")
        list.add("Banana")
        list.add("Pineapple")
        list.add("Orange")
        list.add("Mango")
        list.add("Grapes")
        list.add("Lemon")
        list.add("Melon")
        list.add("Watermelon")
        list.add("Papaya")
        adapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list)
        listView.adapter = adapter
        searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
            override fun onQueryTextSubmit(query: String): Boolean {
                if (list.contains(query)) {
                    adapter.filter.filter(query)
                } else {
                    Toast.makeText(this@MainActivity, "No Match found", Toast.LENGTH_LONG).show()
                }
                return false
            }
            override fun onQueryTextChange(newText: String): Boolean {
                adapter.filter.filter(newText)
                return false
            }
        })
    }
}

コードのポイント

この実装の核となるのは setOnQueryTextListener() です。リスナーには2つのコールバックメソッドがあります。

  • onQueryTextSubmit(): キーボードの検索ボタンが押されたときに呼ばれます。入力値がリストに含まれていれば filter で絞り込みを行い、含まれていなければToastで「No Match found」と表示します。
  • onQueryTextChange(): 検索ボックスの入力内容が変わるたびに呼ばれます。ここでも filter を呼び出すことで、入力に応じてリストをリアルタイムに絞り込めます。

Step 4:AndroidManifest.xml を確認する

androidManifest.xml は以下のようになります。特別なパーミッションは不要です。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="com.example.q11">
    <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 KotlinでSearchViewを使う方法!ListViewの検索機能を実装する手順を解説をクリックしてください。接続済みのモバイルデバイスを選択すると、端末にアプリの初期画面が表示されます。

Android KotlinでSearchViewを使う方法!ListViewの検索機能を実装する手順を解説

Android KotlinでSearchViewを使う方法!ListViewの検索機能を実装する手順を解説

検索ボックスに文字を入力すると、それに合わせてListViewの項目がリアルタイムに絞り込まれます。たとえば「Apple」と入力すれば該当項目だけが表示され、リストに存在しないキーワードを送信すると「No Match found」というトーストが表示されることが確認できます。

  1. 【Android】スナックバー(Snackbar)の使い方をステップごとに解説

    このチュートリアルでは、Androidアプリでスナックバー(Snackbar)を使用する方法を、サンプルコードとともに段階的に解説します。スナックバーは画面下部に短いメッセージを一時的に表示できるUIコンポーネントで、Toastとは異なり「再試行(RETRY)」などのアクションボタンを組み込めるのが大きな特徴です。 手順1:新規プロジェクトを作成する Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成しましょう。 手順2:レイアウトファイル(activity_main.xml)を編集する

  2. 【Android】NavigationViewの実装方法をステップごとに解説

    この記事では、AndroidアプリでNavigationView(ナビゲーションビュー)を使用してドロワーメニューを実装する方法を、ステップごとに詳しく解説します。ハンバーガーアイコンから開閉できるサイドメニューは、多くのアプリで採用されている定番のUIです。ステップ1:新しいプロジェクトを作成するAndroid Studioを開き、File → New Project を選択して、必要な情報を入力し新しいプロジェクトを作成します。テンプレートには「Navigation Drawer Activity」を選ぶと、後の作業がスムーズになります。ステップ2:activity_main.xml にコ