반응형
RecyclerView 검색 기능 적용 개요
이전 발행글에서 RecyclerView Click Evnet를 적용하는 방법에 대해 알아보았습니다.
RecyclerView 관련 정보 링크
2022.09.28 - [IT/Android] - Android Retrofit2를 활용한 공공데이터 API 사용하기
2022.09.29 - [IT/Android] - Android Retrofit2 데이터 RecyclerView 적용하기
2022.09.29 - [IT/Android] - Android RecyclerView Click Event 적용하기 (클릭 이벤트)
이번에는 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 검색 기능 결과
반응형
'IT > Android' 카테고리의 다른 글
Android 앱 WebView 로 애드센스 노출 시 주의점. (2) | 2022.11.17 |
---|---|
Android BottomNavigationView 색상 변경 방법 (icon, text, background) (1) | 2022.10.19 |
Android RecyclerView Click Event 적용하기 (클릭 이벤트) (1) | 2022.09.29 |
Android Retrofit2 데이터 RecyclerView 적용하기 (0) | 2022.09.29 |
Android Retrofit2를 활용한 공공데이터 API 사용하기 (1) | 2022.09.28 |
댓글