Android實現搜尋,EditText+ListView(超簡單)
阿新 • • 發佈:2019-01-28
網上有很多實現搜尋框的解決方案,我寫的這個原理也很簡單,對搜尋框進行監聽,然後利用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=newHashMap<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(); }
效果達成,美滋滋