gpt4 book ai didi

Android 如果在自动完成中实现可过滤的正确方法

转载 作者:太空狗 更新时间:2023-10-29 15:23:20 26 4
gpt4 key购买 nike

我想做的是,但惨遭失败的是:

在我看来,我有一个自动完成的 Textview。我想通过 GET 获取一个 json 对象数组。大约需要1-2秒...(我应该使用 AsyncTask 还是 Handler 来支持此提取?)

然后根据这个数组过滤用户的输入。

目前我已经实现了我的自定义适配器......

public class StationAdapter extends BaseAdapter implements Filterable {

Context _ctx;
//returned stations...
ArrayList<Station> _stations;

// to hold original stations...
private ArrayList<Station> orig;

//Custom filter to be used
private final StationFilter filter;

public StationAdapter(final Context ctx, final ArrayList<Station> stations) {
this._ctx = ctx;
this._stations = stations;
this.orig = stations;
this.filter = new StationFilter();
}

@Override
public int getCount() {
if (_stations != null)
return _stations.size();
else
return 0;
}

@Override
public Object getItem(final int position) {
return _stations.get(position);
}


//IS unused? NO whats its real purpose ?...
@Override
public long getItemId(final int position) {
return (position);
}


@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
StationView sv;
if (convertView == null)
sv = new StationView(_ctx, _stations.get(position));
else {
sv = (StationView) convertView;
sv.setCode(_stations.get(position).mCode);
sv.setName(_stations.get(position).mName);
}
return sv;
}

@Override
public Filter getFilter() {
return filter;
}

private class StationFilter extends Filter {

@Override
protected FilterResults performFiltering(final CharSequence constraint) {

final FilterResults oReturn = new FilterResults();
final ArrayList<Station> results = new ArrayList<Station>();
if (orig == null)
orig = _stations;
if (constraint != null) {
if (orig != null && orig.size() > 0) {
for (final Station g : orig) {
if (g.mName.contains(constraint.toString().toUpperCase()))
results.add(g);
}
}
oReturn.values = results;
}
return oReturn;

}

@SuppressWarnings("unchecked")
@Override
protected void publishResults(final CharSequence constraint, final FilterResults results) {
_stations = (ArrayList<Station>) results.values;
notifyDataSetChanged();
}
}

出于某种原因,过滤后的响应每隔一个输入键就会触发一次,我的 main.xml 看起来就像这样......

        <AutoCompleteTextView android:id="@+id/search_stations"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lines="1"
android:singleLine="true"
/>

有人可以指出我做错了什么以及一些处理这种用例的教程

提前致谢

最佳答案

这已经很晚了,但我相信这是预期的行为。过滤逻辑将在另一个请求传出时将请求排队。因此,如果您键入“a”,它将获取结果,之后的任何字母都将等待,直到“a”的结果返回。这些结果返回后,将发出新的请求,依此类推。

关于Android 如果在自动完成中实现可过滤的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5164970/

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