1. 程式人生 > >Android實現搜尋,EditText+ListView(超簡單)

Android實現搜尋,EditText+ListView(超簡單)

網上有很多實現搜尋框的解決方案,我寫的這個原理也很簡單,對搜尋框進行監聽,然後利用adapter.notifyDataSetChanged()對listview進行實時重新整理.

下圖是我想達到的效果

首先我們先構造ListView

private ListView listView;
private List<Map<String,Object>> personalList =new ArrayList<Map<String, Object>>();
private List<Map<String, Object>> listItems 
= new ArrayList<Map<String, Object>>(); private EditText editText; private SimpleAdapter adapter;

@Override
public void InitView() {List<ShopClient> shopClient = DataSupport.findAll(ShopClient.class);
    for (ShopClient shopClient1 : shopClient) {
        Map<String,Object> map=new 
HashMap<String,Object>(); map.put("name",shopClient1.getClient_name()); map.put("number",shopClient1.getClient_phone()); personalList.add(map); } } @Override public void InitData() { adapter = new SimpleAdapter(getActivity(),personalList,R.layout.list_call_client, new String[]{"name"
,"number"},new int[]{R.id.Text_client_name,R.id.Text_client_number}); listView = (ListView)this.getView().findViewById(R.id.newhome_listview_client); listView.setAdapter(adapter); }

現在達到了顯示的效果,接下來就是對搜尋框的一個監聽

editText.addTextChangedListener(new TextWatcher() {
    @Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
        // TODO Auto-generated method stub
String name = s.toString();
changeClient(name);
}

    @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
}
});

看一下  changeClient() 方法:

public void changeClient(String name){
    listItems.clear();
List<ShopClient> shopClient = DataSupport.where("client_name like ?", "%" + name + "%").find(ShopClient.class);
    for (ShopClient shopClient1 : shopClient) {
        Map<String, Object> map = new HashMap<String, Object>();
map.put("name", shopClient1.getClient_name());
map.put("number", shopClient1.getClient_phone());
listItems.add(map);
}
    personalList.clear();
personalList.addAll(listItems);
adapter.notifyDataSetChanged();
}

效果達成,美滋滋大笑