커스텀 리스트뷰 검색기능은 정말.. 많은 시도를 해보았는데,
noFilter ? 클래스를 상속하기보단 editText 내용을 검색하는 search함수를 짜주는 것이 훨씬 편했다.
따라서 searchView 가 아닌, editText를 사용한다.
다만 DB를 탐색하는 것이 아닌 액티비티 내에서만 검색이 가능하다.
우선 기존의 마켓아이템리스트와 그냥리스트를 선언해줍니다.
ArrayList<MarketItem> marketItemArrayList;
ArrayList<MarketItem> arraylist;
마켓아이템리스트는 처음에 액티비티가 실행되었을 때에 보이는 마켓의 아이템들이고,
그냥리스트는 추후에 검색할 때마다 추가되어 출력되는 형식이기 때문에,
이렇게 두 개의 리스트를 선언해줍니다.
-> 한글자씩 써줄 때마다 마켓리스트는 clear, 글자에 따른 그냥리스트가 출력.
OnCreate 안에 다음과 같이 editText 함수들을 써줍니다.
editText 의 내용이 달라질 때마다 호출되는 함수들을 Override 해줍니다.
arraylist.addAll(marketItemArrayList);
// 검색기능 (앱 내)
EditText searchView = (EditText) viewGroup.findViewById(R.id.searchView);
searchView.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 text = searchView.getText().toString();
search(text);
}
});
OnCreate 바깥에 search함수를 짜줍니다.
public void search(String charText){
marketItemArrayList.clear();
if(charText.length() == 0){
marketItemArrayList.clear();
marketItemArrayList.addAll(arraylist);
}
else{
for(int i = 0; i < arraylist.size(); i++){
if(arraylist.get(i).getName().toLowerCase().contains(charText)){
marketItemArrayList.add(arraylist.get(i));
}
}
}
adapter.notifyDataSetChanged();
}
글자가 하나씩 바뀔 때마다 추가가 됩니다.
'프로젝트' 카테고리의 다른 글
[안드로이드 스튜디오] 엑셀파일 읽어오기 (0) | 2021.08.28 |
---|---|
[안드로이드 스튜디오] 엑셀 파일을 내부DB에 저장 후 불러오기 (0) | 2021.08.24 |
[Android Studio] 파이어베이스를 활용한 키워드 구독 / FCM (Firebase Cloud Messaging) (0) | 2021.07.15 |
[Android Studio] 학교 홈페이지 웹 크롤링 (0) | 2021.07.15 |
학교 졸업요건+공지사항 알리미 앱 만들기_구상편 (0) | 2021.07.07 |