모바일 [Android] Dynamic Search ListView
페이지 정보
작성자
본문
< EditText과 Filter를 이용한 Search >
EditText의 addTextChangedListener를 통해서 EditText에 입력되는 값을 실시간으로 처리해줄수 있게 된다.
et_search_word.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
_listAdapter.getFilter().filter(s);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
onTextChanged를 통해서 입력되는 값에 대해서 실시간으로 처리해준다.
ListView를 구성하는 Adapter에 implements Filterable 를 통해서 Filtering을 할 수 있게 된다.
Adapter 내에
@Override
public Filter getFilter() {
if (valueFilter == null) {
valueFilter = new ValueFilter();
}
return valueFilter;
}
구현해주고
Filter에 해당하는 class를 구현해서 적용하면 끝.
class ValueFilter extends Filter {
@Override
protected FilterResults performFiltering (CharSequence constraint) {
FilterResults results = new FilterResults();
if(constraint != null && constraint.length() > 0) {
List<ItemContainer> filterList = new ArrayList<ChatFriendFragment.ItemContainer>();
for (RosterContact contact : _contacts) {
if (contact.getName().contains(constraint) || contact.getPhoneNumber().contains(constraint)) {
ItemContainer item = new ItemContainer();
item.Type = ItemContainer.TYPE_ITEM;
item.Item = contact;
filterList.add(item);
}
}
results.count = filterList.size();
results.values = filterList;
} else {
setupListItems();
results.count = _itemList.size();
results.values = _itemList;
}
return results;
}
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
_itemList = (List<ItemContainer>) results.values;
_listAdapter.notifyDataSetChanged();
}
}
EditText의 addTextChangedListener를 통해서 EditText에 입력되는 값을 실시간으로 처리해줄수 있게 된다.
et_search_word.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
_listAdapter.getFilter().filter(s);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
onTextChanged를 통해서 입력되는 값에 대해서 실시간으로 처리해준다.
ListView를 구성하는 Adapter에 implements Filterable 를 통해서 Filtering을 할 수 있게 된다.
Adapter 내에
@Override
public Filter getFilter() {
if (valueFilter == null) {
valueFilter = new ValueFilter();
}
return valueFilter;
}
구현해주고
Filter에 해당하는 class를 구현해서 적용하면 끝.
class ValueFilter extends Filter {
@Override
protected FilterResults performFiltering (CharSequence constraint) {
FilterResults results = new FilterResults();
if(constraint != null && constraint.length() > 0) {
List<ItemContainer> filterList = new ArrayList<ChatFriendFragment.ItemContainer>();
for (RosterContact contact : _contacts) {
if (contact.getName().contains(constraint) || contact.getPhoneNumber().contains(constraint)) {
ItemContainer item = new ItemContainer();
item.Type = ItemContainer.TYPE_ITEM;
item.Item = contact;
filterList.add(item);
}
}
results.count = filterList.size();
results.values = filterList;
} else {
setupListItems();
results.count = _itemList.size();
results.values = _itemList;
}
return results;
}
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
_itemList = (List<ItemContainer>) results.values;
_listAdapter.notifyDataSetChanged();
}
}
댓글목록
등록된 댓글이 없습니다.