Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

안드로이드 코틀린(Kotlin)에서 SearchView를 활용한 검색 기능 구현 방법

이 튜토리얼에서는 안드로이드 앱에서 SearchView 위젯을 사용해 리스트를 실시간으로 검색·필터링하는 방법을 코틀린(Kotlin)으로 단계별로 알아봅니다. SearchView는 사용자가 입력한 검색어에 따라 ListView의 항목을 즉시 걸러주는 기능을 손쉽게 구현할 수 있게 해줍니다.

1단계: 새 프로젝트 생성

Android Studio를 실행하고 File → New Project 메뉴로 이동한 뒤, 필요한 정보를 모두 입력하여 새 프로젝트를 생성합니다. 언어는 Kotlin으로 선택하세요.

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" 속성은 앱 실행 시 검색창이 펼쳐진 상태로 표시되도록 하며, queryHint는 검색창에 미리 보여질 힌트 문구를 지정합니다.

3단계: 메인 액티비티 작성 (MainActivity.kt)

src/MainActivity.kt 파일에 아래 코드를 추가합니다. 과일 이름 목록을 만들어 ArrayAdapter에 연결한 후, SearchView의 OnQueryTextListener를 통해 검색어가 입력되거나 제출될 때마다 리스트를 필터링합니다.

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
            }
        })
    }
}

핵심 로직 설명:

  • onQueryTextChange(): 검색창에 글자가 입력될 때마다 호출되며, 입력된 값으로 리스트를 실시간 필터링합니다.
  • onQueryTextSubmit(): 검색 버튼(엔터)을 눌렀을 때 호출되며, 목록에 없는 단어를 검색하면 "일치하는 결과가 없습니다"라는 토스트 메시지를 표시합니다.

4단계: 매니페스트 확인 (AndroidManifest.xml)

androidManifest.xml 파일이 아래와 같이 MainActivity가 런처 액티비티로 등록되어 있는지 확인합니다.

<?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 Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바의 Run(실행) 아이콘을 클릭하세요. 실행 옵션에서 연결된 모바일 기기를 선택하면, 기기 화면에 과일 목록과 함께 검색창이 나타납니다.

검색창에 예를 들어 "Apple"을 입력하면 해당 항목만 즉시 필터링되어 표시되고, 목록에 없는 단어를 검색하면 토스트 메시지로 알려줍니다.