IT/Android

Android RecyclerView 검색 기능 적용하기

someday.. 2022. 9. 29. 18:47
반응형

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 검색 기능

 

 

반응형