총 게시물 38,796건, 최근 3 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[안드로이드]

리스트뷰 검색

글쓴이 : 망한인생 날짜 : 2017-10-13 (금) 13:27 조회 : 147
글주소 : http://www.androidside.com/B49/168527
 
  20일에 100매출 순수치킨
불경기 창업은 맛과 매출로 보이는 것만 창업하세요. 치킨창업의 혁명. 40호점돌파
www.순수치킨매출.kr
  8호닭 고마진 홍희쌀통닭
80호점돌파, 15평 부부운영시 50.1%마진율, 순익1080만원, 맛보면 창업
홍희통닭.kr
  핸드메이드 치킨 그릴킹
치킨창업의 새로운 트랜드 그릴킹. 차원이 다른 치킨프랜차이즈. 프리미엄 브랜드
www.grillking.co.kr
신청하기


안드로이드, 자바 그리고 다양한 질문에 대해 성실히 답해드립니다. Q&A Jang

리스트뷰 위에 EditText를 생성해서 입력하면 값이 검색되는것을 하는데요
만약 '치킨'이라고 치면 항목에 치킨이 포함된 리스트 항목들이 모두 나타났으면 하는데
치킨으로 시작하는 항목만 나타나집니다ㅠㅠ
Filter에 설정을 해준다고 해줬는데 안 먹히네요ㅠㅠ
방법이 있을까요?

메인부분
editText.addTextChangedListener(new TextWatcher() {

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void onTextChanged(CharSequence cs, int start, int before, int count) {

}

@Override
public void afterTextChanged(Editable editable) {

String str = editable.toString();
((SimpleAdapter) listview.getAdapter()).getFilter().filter(str);

}

});


어댑터부분
@Override
public Filter getFilter() {

list.clear();
list_.clear();
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {

FilterResults results = new FilterResults();

if (constraint == null || constraint.length() == 0) {

results.count = list.size();
results.values = list;
} else {
ArrayList<MainListData> resultsData = new ArrayList<>();
String searchStr = constraint.toString();
for (MainListData s : list) {
if (s.getTitle().contains(searchStr)) {
resultsData.add(s);
}

}
results.count = resultsData.size();
results.values = resultsData;
}

return results;
}

@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
list.clear();
list = (ArrayList<MainListData>) results.values;
if (results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
};

}





질문자가 자신의 포인트 20 점을 걸었습니다.
답변하시면 포인트 2을, 답변이 채택되면 포인트 16을 드립니다.

질문답변 게시판에서 궁금한 사항을 해결하셨다면, 애써 답변해주신 분께 잘 되었다고 따뜻한 댓글 한마디 남겨주세요.
그리고 답변해주신 분의 글을 '추천' 해주세요.
추천받으신 분에게 1포인트가, 추천하신 분에게도 1포인트가 적립됩니다. ^^

cong 2017-10-13 (금) 14:49
Filter를 쓸필요가있는건가요?

전체데이터는 list에 따로 담아두고

isEmpty일때는 전체데이터를 출력 list에 넣어주고

아닐때 변경되는 데이터를 콜렉션 필터같은걸로 뽑아내서 출력하면될거 같은데..

https://www.mkyong.com/java8/java-8-streams-filter-examples/

저는 이런식으로..

fun searchFilter(pText : String){
dataMies.clear()
if(pText.isEmpty()){
dataMies.addAll(finalDataMies)
}else{
finalDataMies.filterTo(dataMies) {it.eng.toLowerCase().contains(pText.toLowerCase()) ||
it.kor.toLowerCase().contains(pText.toLowerCase())
}
}
notifyDataSetChanged()
}
댓글주소 추천 0 반대 0
이전글  다음글  목록 글쓰기

 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기