[英]AutoCompleteTextView not workng
我正在做一個計費應用程序,稍后我會嘗試使用AutoCompleteTextView來獲取我添加到Arraylist中的項目時,應先將這些項目保存到數組列表中,但是到目前為止,我無法從中獲取任何數據數組列表。 我以為也許可能有任何錯誤,但我找不到任何地方,原因可能是我可能錯過了適配器中的某些東西。 那么有人可以幫助我嗎? 謝謝
這是我的適配器
public class AutoSuggestAdapter extends ArrayAdapter {
private Context mCtx;
private int resource;
private ArrayList<ItemModel> items;
private ArrayList<ItemModel> tempItems;
private List<ItemModel> suggestions;
public AutoSuggestAdapter(Context mCtx, int resource, ArrayList<ItemModel> items) {
super(mCtx, resource, 0, items);
this.mCtx = mCtx;
this.resource = resource;
this.items = items;
tempItems = new ArrayList<>();
suggestions = new ArrayList<ItemModel>(items);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mCtx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(resource, parent, false);
}
ItemModel item = items.get(position);
if (item != null && view instanceof TextView) {
((TextView) view).setText((CharSequence) item);
}
return view;
}
@Override
public Filter getFilter() {
return itemFilter;
}
Filter itemFilter = new Filter() {
@Override
public CharSequence convertResultToString(Object resultValue) {
String str = (String) resultValue;
return str;
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
if (constraint != null) {
suggestions.clear();
for (ItemModel items : tempItems) {
if (items.toLowerCase().contains(constraint.toString().toLowerCase())) {
suggestions.add(items);
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = suggestions;
filterResults.count = suggestions.size();
return filterResults;
} else {
return new FilterResults();
}
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
List<String> filterList = (ArrayList<String>) results.values;
if (results != null && results.count > 0) {
clear();
for (String item : filterList) {
add(item);
notifyDataSetChanged();
}
}
}
};
}
在xml中將AutoCompleteTextView添加為
<AutoCompleteTextView
android:id="@+id/additemtobillname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:textColor="@color/colorAccent"
android:textSize="@dimen/textsize"
android:layout_marginLeft="20dp"
android:layout_toRightOf="@id/text2"
android:hint="Enter Item Name" />
並在活動中聲明為
AutoCompleteTextView actv = findViewById(R.id.additemtobillname);
final ArrayList<ItemModel>[] itemlist = new ArrayList[]{new ArrayList<>()};
AutoSuggestAdapter adapter = new AutoSuggestAdapter(this, android.R.layout.simple_spinner_dropdown_item, itemlist[0]);
actv.setAdapter(adapter);
actv.setThreshold(1);
您正在使用沒有初始值的各種對象。
首先,我看到的是這是從來沒有下performFiltering方法使用前賦值tempItems。
將項目的值分配給構造函數下的tempItems
//tempItems = new ArrayList<>();
tempItems = items;
或在performFiltering內部而不是tempItems對象中循環遍歷items對象
for (ItemModel item : items) {
if (item.toLowerCase().contains(constraint.toString().toLowerCase())) {
suggestions.add(item);
}
}
此外,在調用itemlist [0]之前itemList為空。 這將引發運行時錯誤(ArrayOutOfBound)。
在引用其零索引之前,將至少一個值添加到數組對象。
AutoCompleteTextView actv = findViewById(R.id.additemtobillname);
final ArrayList<ItemModel>[] itemlist = new ArrayList[]{new ArrayList<>()};
//add value
itemlist.add(new ArrayList<ItemModel>());
//pass use to adapter
AutoSuggestAdapter adapter = new AutoSuggestAdapter(this, android.R.layout.simple_spinner_dropdown_item, itemlist[0]);
actv.setAdapter(adapter);
actv.setThreshold(1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.