Android之AutoCompleteTextView自动匹配RecycleView
XML布局文件中:
<AutoCompleteTextView android:id="@+id/search_bar" android:layout_width="match_parent" android:layout_height="@dimen/searchbar_height" android:background="@color/transparent" android:completionThreshold="1" android:completionHint="出现在匹配框下面的文字,可作为提示信息" android:maxLines="1" android:padding="5dp" />completionThreshold:输入多少个字后开始匹配
java代码中:
需要RecycleView,填充RecycleView的List
1.将List的数据里面的name字段提取出来变成的一个String[]数组,使用自定义的toArray()方法
2.把Sting[]数组给一个ArrayAdapter用于提供AutoCompleteTextView地提示数据。
AutoCompleteTextView autoCompleteTextView;
RecyclerView contactRecycle;
autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.search_bar);
contactRecycle = (RecyclerView) findViewById(R.id.recycleview_contact);
contactRecycle.setLayoutManager(new LinearLayoutManager(activity)); //设置固定大小 //contactRecycle.setHasFixedSize(true); contactRecycle.setItemAnimator(new DefaultItemAnimator()); //添加分割线 contactRecycle.addItemDecoration(new ItemDecoration()); contactRecycle.setAdapter(adapter);
autoCompleteTextView.setAdapter( new ArrayAdapter<String >(activity,android.R.layout.simple_list_item_1, toArray(contractList))); autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { int p = search(autoCompleteTextView.getText().toString().trim());//获取选中内容在list中的位置 if (position==-1){ showShortToast("没有相关记录"); } else contactRecycle.smoothScrollToPosition(p);//recycleView跳转到p位置 } });
private String[] toArray(List<Contract> list){ String[] strings = null; if (list!=null) { strings = new String[list.size()]; for (int i=0;i<list.size();i++){ strings[i] = list.get(i).name; } } return strings; }
private int search(String name){ int position = 0; for (Contract c:contractList) { position++; if (c.name.equals(name)){ return position; } } return -1; }