我的XML:
<AutoCompleteTextView
android:id="@+id/searchAutoCompleteTextView_feed"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:completionThreshold="2"
android:hint="@string/search" />
我的java代码:
AutoCompleteTextView eT = (AutoCompleteTextView)findViewById(R.id.searchAutoCompleteTextView_feed);
eT.addTextChangedListener(this);
String[] sa = new String[]{"apple", "mango", "banana", "apple mango", "mango banana"};
ArrayAdapter<String> aAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line, sa);
eT.setAdapter(aAdapter);
这根本不起作用...我的意思是它就像一个编辑文本视图一样工作。我错在哪里了?
完整代码:
public class FeedListViewActivity extends ListActivity implements TextWatcher{
private AutoCompleteTextView eT;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.feed);
eT = (AutoCompleteTextView) findViewById(R.id.searchAutoCompleteTextView_feed);
eT.addTextChangedListener(this);
Thread thread = new Thread(null, loadMoreListItems);
thread.start();
}
private Runnable returnRes = new Runnable() {
public void run() {
//code for other purposes
}
};
private Runnable loadMoreListItems = new Runnable() {
public void run() {
getProductNames();
// Done! now continue on the UI thread
runOnUiThread(returnRes);
}
};
protected void getProductNames() {
String[] sa = new String[]{"apple", "mango", "banana", "apple mango", "mango banana"};
ArrayAdapter<String> aAdapter = new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_dropdown_item_1line, sa);
eT.setAdapter(aAdapter);
}
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
}
7条答案
按热度按时间n3h0vuf21#
我只是看到你的另一个问题之前看到这一个。我是挣扎与自动完成了一段时间,我几乎恢复到您的新实现下载所有的关键字,直到我终于得到它的工作。我所做的是;
在我的文本观察器的onTextChanged方法中,我使用asynctask获得建议
然后在AsyncTask的onPostExecute中更新自动完成文本视图
有关详细信息,请参见设置更改通知和通知数据集更改
d6kp6zgx2#
这是我的项目的一个片段。2我认为当你从服务中获得数据后,你所要做的就是:
1.清除以前的数据。
1.清除以前的适配器值。
1.然后使用add()或addAll()方法向数据列表中添加值。
1.通过调用适配器上的notifyDataSetChanged()通知数据发生了变化。
}
但在此之前,请确保您已经将适配器附加到自动完成文本视图,如果不这样做的话,如下所示:
isr3a4wc3#
使用
adapter.notifyDataSetChanged()
方法通知列表中的更改,如果该方法不起作用,则可以像autoCompleteTextView.showDropDown()
一样手动显示DropDown4xy9mtcn4#
它的工作只是对et.addtext行进行注解...
wnvonmuf5#
更新适配器并立即通知更改show
dropDown
后,唯一可行的解决方案是再次重置AutoCompleteTextView
文本,Kotlin示例:Java类似于:
pkwftd7m6#
自动完成文本视图。Invalidate()将执行此操作。
lsmepo6l7#
如果有人使用自定义对象数组列表,并面临这个问题,请检查您的模型类,看看您是否覆盖了toString中的正确变量。如果您还没有覆盖,请覆盖toString。