gpt4 book ai didi

android - 如何从双字符串对象列表中绑定(bind) AutoCompleteTextView?

转载 作者:行者123 更新时间:2023-11-29 15:49:43 25 4
gpt4 key购买 nike

我的布局中有一个自动完成文本框,我正在使用自定义适配器来填充自动完成建议。

AutoCompleteTextView autocompleteView = (AutoCompleteTextView) findViewById(R.id.autocomplete);
autocompleteView.setAdapter(new PlacesAutoCompleteAdapter(context, R.layout.autocomplete_list_item));

点击建议时,所选值会显示在 Toast 中。

autocompleteView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String description = (String) parent.getItemAtPosition(position);
Toast.makeText(context, description, Toast.LENGTH_SHORT).show();
}
});

这是我的自定义适配器类。 我已经标记了我的方法返回字符串列表的地方。

public class PlacesAutoCompleteAdapter extends ArrayAdapter<String> implements Filterable {

ArrayList<String> resultList;
Context mContext;
int mResource;

public PlacesAutoCompleteAdapter(Context context, int resource) {
super(context, resource);
mContext = context;
mResource = resource;
}

@Override
public int getCount() {
// Last item will be the footer
return resultList.size();
}

@Override
public String getItem(int position) {
return resultList.get(position);
}


@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new Filter.FilterResults();
if (constraint != null) {

resultList = /##### HERE IS MY METHOD WHICH RETURNS A LIST OF STRING #####/

filterResults.values = resultList;
filterResults.count = resultList.size();
}

return filterResults ;
}

@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
notifyDataSetChanged();
}
else {
notifyDataSetInvalidated();
}
}
};

return filter;
}
}

这很好用。但是我需要以这种方式更改适配器,以便它返回一个二维字符串数组。

我的 Intent 是将一组 [name][ID] 对返回到自动完成框。我已经为此编写了一个类。

public class autoCompleteItem {
public String placeName;
public String placeID;
}

我没有返回线性字符串列表,而是修改了数据获取方法以返回 autoCompleteItem 对象列表。但我无法将其绑定(bind)到我的自动完成文本框。

我想要实现的是:

  1. 自动完成框将仅显示 placeName 的 autoCompleteItem 对象列表中的建议。 (即建议不会显示 placeID)

  2. 点击建议时,我希望 placeID 显示在 toast 上。

最佳答案

使用模型的类是正确的方法。当然,您必须更改您的 Adapter .您将不得不延长 extends ArrayAdapter<autoCompleteItem>代替 ArrayAdapter<String> . getItem也是如此,必须返回 autoCompleteItem代替 String .您还必须更改 ArrayList<String> resultListArrayList<autoCompleteItem> resultList .

因为您没有覆盖 getView() ,覆盖模型类中的 getString 并让它返回 placeName

在你的onItemClick你需要

  autoCompleteItem item = (autoCompleteItem) parent.getItemAtPosition(position);

然后您可以访问 autoCompleteItem的成员(member)槽item .

作为小记,autoCompleteItem应该是 AutoCompleteItem根据 java 命名约定。例如

public class AutoCompleteItem {
public String placeName;
public String placeID;

@Override
public String toString() {
return placeName;
}
}

关于android - 如何从双字符串对象列表中绑定(bind) AutoCompleteTextView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30956469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com