簡體   English   中英

AutoCompleteTextView不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM