본문 바로가기
IT/Android

Android RecyclerView 검색 기능 적용하기

by TechTonic 2022. 9. 29.
반응형

RecyclerView 검색 기능 적용 개요

이전 발행글에서 RecyclerView Click Evnet를 적용하는 방법에 대해 알아보았습니다.

 

RecyclerView 관련 정보 링크

2022.09.28 - [IT/Android] - Android Retrofit2를 활용한 공공데이터 API 사용하기

 

Android Retrofit2를 활용한 공공데이터 API 사용하기

우선 HTTP 통신을 위한 많은 라이브러리들이 있지만 Retrofit 을 사용하는 이유와 장점에 대해 간략히 설명하고 사용 방법에 대해 알아보도록 합시다. Retrofit 란? 앱을 만들다보면 통신(HTTP) 이 필요

soir1984.tistory.com

2022.09.29 - [IT/Android] - Android Retrofit2 데이터 RecyclerView 적용하기

 

Android Retrofit2 데이터 RecyclerView 적용하기

개요 지난 발행글에서 Retrofit2 를 사용하여 공공데이터포탈의 API를 사용하여 데이터 가져오기를 해보았다. 이번글에서는 해당 데이터를 기반으로 RecyclerView를 활용하여 리스트뷰를 만드는 작업

soir1984.tistory.com

2022.09.29 - [IT/Android] - Android RecyclerView Click Event 적용하기 (클릭 이벤트)

 

Android RecyclerView Click Event 적용하기 (클릭 이벤트)

개요 이전 발행글에서 RecyclerView 를 적용하는 방법에 대해 알아보았다. RecyclerView 적용 방법에 대한 내용은 아래 링크를 참조하길 바란다. 2022.09.29 - [IT/Android] - Android Retrofit2 데이터 RecyclerV..

soir1984.tistory.com

 

이번에는 RecyclerView 리스트에서 검색 기능 추가하는 방법에 대해 설명합니다.

 

RecyclerView 검색 Layout 구현

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <EditText
            android:id="@+id/editText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="검색어 입력"
            android:inputType="textPersonName"
            tools:ignore="MissingConstraints" />

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

검색과 RecyclerView 리스트만 화면에 출력할 예정입니다.

 

RecyclerView 검색 기능 코드 구현

먼저 Adapter에 Item 등록 및 RecyclerView 업데이트를 실행할 메서드를 추가해 줍니다.

ServiceAdapter에 setItems() 메서드를 추가합니다.

public void setItems(ArrayList<ServiceModel> list){
    items = list;
    notifyDataSetChanged();
}

메서드가 호출되면 검색된 리스트를 받아서 View를 업데이트할 것입니다.

 

EditText View에 대한 이벤트를 만들어줍시다.

private EditText editText;

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

	editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        }

        @Override
        public void afterTextChanged(Editable editable) {
            String searchText = editText.getText().toString();

            if(search_arr.size() > 0){
                search_arr.clear();
            }

            if(searchText.equals("")){
                mAdapter.setItems(arr);
            }
            else {
                // 검색 단어를 포함하는지 확인
                for (int a = 0; a < arr.size(); a++) {
                    if (arr.get(a).getServiceName().toLowerCase().contains(searchText.toLowerCase())) {
                        search_arr.add(arr.get(a));
                    }
                    mAdapter.setItems(search_arr);
                }
            }
        }
    });
}

대략적인 코드 내용은 아래와 같습니다.

  • 1. editText UI에서 입력된 값을 받는다.
  • 2. 입력된 값이 없으면 전체 리스트(arr)에 대한 내용을 Adapter에 담는다.
  • 3. 입력된 값이 있다면 전체 리스트에서 입력된 값이 포함된 리스트(search_arr)를 Adapter에 담는다.
  • 4. Adapter setItems()으로 호출되면 setItems()에서 데이터 초기화 및 리스트 업데이트를 진행한다. (Adapter에서 추가한 내용)

RecyclerView 검색 기능 결과

RecyclerView 검색 기능

 

 

반응형

댓글