gpt4 book ai didi

android - 具有动态适配器更改的 MultiAutoCompleteTextView

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:04:54 25 4
gpt4 key购买 nike

我有一个 MultiAutoCompleteTextView我的 Activity 中的小部件,它有一个 ArrayAdapter<String>由基于 Web 的调用的结果填充。当用户在 TextView 中键入字符时,此适配器的列表应该在后台更新。实现这一点的最佳方法是什么?

我已经尝试使用 AsyncTask在后台下载字符串列表,但是notifyDataSetChanged()从“非原始线程”调用。而且,这似乎有点迂回。

我遇到的另一个选择是 Filterable可以使用,但我还没有遇到任何关于如何执行此操作的简单示例(AutoComplete4 似乎有点矫枉过正)。如果没有示例,有人可以对我需要的参与者进行广泛的概述 - 过滤器、可过滤等。

这也是一个好方法吗?

谢谢,
拉贾特

最佳答案

我知道这个问题很老,但我不得不做同样的事情,我想我会与您分享解决方案,否则任何人都会需要它。

首先,您确实需要使用 AsyncTask 来检索您的数据。这就是说,我永远不会让 AsyncTask 以任何方式操纵我的 View 类。相反,我宁愿使用 回调 连同您在 AsyncTask 中需要的参数一起传递。一旦 AsyncTask 完成,您将调用回调方法,该方法将负责调用 notifyDataSetChanged()

这是一些代码:

MyAsyncTask.java

public class MyAsyncTask extends AsyncTask<Object, Void, Object> {

@Override
protected String doInBackground(Object... params) {
MyController callbackClass = (MyController) params[0];

// Get your other parameters and do your stuff here...

// Call the setter with the data you get back and refresh the view
// either here or implementing onPostExecute.
callbackClass.setMyData(myData);
callbackClass.refreshView();

// Return any object if you need.
return null;
}
}

MyCallbackClass.java

 public MyCallbackClass extends Fragment{

private List<MyDataType> myData;

private ArrayAdapter<MyDataType> myAdapter;

// Your methods including setters and getters.

public void refreshFriendList(){
if(myAdapter == null){
initAutoCompleteView();
}
myAdapter.clear();
myAdapter.addAll(myData);
myAdapter.notifyDataSetChanged();
}

}

关于android - 具有动态适配器更改的 MultiAutoCompleteTextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5762871/

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