用Editext 和 Listview简单实现仿淘宝搜索联想功能:
1.activity布局代码:
sousu_lianxiang_layout
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/search_ed_tv" android:padding="10dp" android:layout_margin="10dp" android:background="@drawable/search_editext_bg" android:hint="牙刷" /> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/listview" /> </LinearLayout>
2.activity 代码
SearchActivity
public class SearchActivity extends AppCompatActivity { @BindView(R.id.search_ed_tv) EditText searchEdTv; @BindView(R.id.listview) ListView listview; SearchAdapter adapter; List<String> list=new ArrayList<String>(); List<String> nlist=new ArrayList<String>(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sousu_lianxiang_layout); ButterKnife.bind(this); initData(); searchEdTv.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) { search(charSequence.toString()); } @Override public void afterTextChanged(Editable editable) { } }); } void initData(){ list.add("牙刷"); list.add("牙膏"); list.add("电动牙刷"); list.add("洗发水"); list.add("洗衣液"); list.add("手机"); list.add("手机壳"); list.add("手机贴膜"); list.add("连衣裙"); list.add("半裙"); list.add("短裙"); } void search(String s){ nlist.clear(); if((s!=null)&&!(s.equals(""))){ for(int i=0;i<list.size();i++){ String name=list.get(i); if((name!=null)&&!(name.equals(""))){ if(name.contains(s)){ nlist.add(name); } } } } if(adapter==null){ adapter=new SearchAdapter(this,nlist); listview.setAdapter(adapter); }else{ adapter.notifyDataSetChanged(); } } }
3.adapter:
public class SearchAdapter extends BaseAdapter { Context context; List<String> list; LayoutInflater inflater; public SearchAdapter(Context context, List<String> list) { this.context = context; this.list = list; this.inflater=LayoutInflater.from(context); } @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return list.get(i); } @Override public long getItemId(int i) { return list.get(i).hashCode(); } @Override public View getView(int i, View view, ViewGroup viewGroup) { view=inflater.inflate(R.layout.search_adapter_item_layout,null); TextView tv=view.findViewById(R.id.item_tv); String name=list.get(i); if(name!=null){ tv.setText(name); } return view; } }
4.adapter item layout:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="10dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:id="@+id/item_tv" /> </LinearLayout>
5.实现的方法是,监听Editext输入文字,把输入的文字在数据列表中搜索对应包含的数据项,放在listview中显示出来,但是我没有做适应拼音输入,只是做了适应中文输入的