在我的应用中有一段时间,无论用户输入了什么内容,我都必须强制显示建议列表中的所有项目。我怎样才能做到这一点?
我尝试使用过滤进行某些操作,但是对我而言,作为初学者进行过滤实在太复杂了,我尝试在没有任何运气的情况下搜索初学者教程进行过滤。也许,有一种更简单的方法可以强制显示所有建议项?
编辑:基本上我的想法是,当用户键入列表中未包含的内容时,它将显示他可以拥有的所有可用选项。
我已经找到检查ACTV是否正常显示天气的最佳方法,但是onTextChangeEvent我将用户键入的文本与列表进行比较,然后如果未找到任何元素,则显示完整列表。
public void onTextChanged(CharSequence s, int start, int before, int count) { final EditText editText = (EditText) findViewById(R.id.vardsUserInput); String strValue = editText.getText().toString().toUpperCase(); String temp; int Cc=0; //my count variable for(int i=0; i<vardi.length; i++) { temp = vardi[i].toUpperCase(); if(temp.startsWith(strValue.toUpperCase())) { Log.d("testing",vardi[i]); Cc++; } } if(Cc == 0) { //Show all the available options textView.showDropDown(); } }
基本上,经过5-6个小时的实验以了解该死的过滤器的工作原理后,我编写了自己的适配器,该适配器完全可以实现我想要的功能:
public class burtuAdapteris extends ArrayAdapter<String> implements Filterable { ArrayList<String> _items = new ArrayList<String>(); ArrayList<String> orig = new ArrayList<String>(); public burtuAdapteris(Context context, int resource, ArrayList<String> items) { super(context, resource, items); for (int i = 0; i < items.size(); i++) { orig.add(items.get(i)); } } @Override public int getCount() { if (_items != null) return _items.size(); else return 0; } @Override public String getItem(int arg0) { return _items.get(arg0); } @Override public Filter getFilter() { Filter filter = new Filter() { @Override protected FilterResults performFiltering(CharSequence constraint) { if(constraint != null) Log.d("Constraints", constraint.toString()); FilterResults oReturn = new FilterResults(); /* if (orig == null){ for (int i = 0; i < items.size(); i++) { orig.add(items.get(i)); } }*/ String temp; int counters = 0; if (constraint != null){ _items.clear(); if (orig != null && orig.size() > 0) { for(int i=0; i<orig.size(); i++) { temp = orig.get(i).toUpperCase(); if(temp.startsWith(constraint.toString().toUpperCase())) { _items.add(orig.get(i)); counters++; } } } Log.d("REsult size:" , String.valueOf(_items.size())); if(!counters) { _items.clear(); _items = orig; } oReturn.values = _items; oReturn.count = _items.size(); } return oReturn; } @SuppressWarnings("unchecked") @Override protected void publishResults(CharSequence constraint, FilterResults results) { if(results != null && results.count > 0) { notifyDataSetChanged(); } else { notifyDataSetInvalidated(); } } }; return filter; } }
而且使用简单,只需将原始适配器替换为此:
final burtuAdapteris fAdapter = new burtuAdapteris(this, android.R.layout.simple_dropdown_item_1line, liste);
就我而言,liste是: ArrayList<String> liste = new ArrayList<String>();
ArrayList<String> liste = new ArrayList<String>();