2011-11-08 62 views
11

我使用Android的AutoCompleteTextViewCursorAdapter来自动完成添加到应用程序。在视图的onItemClickListener()中(即,当用户触摸其中一个自动完成的下拉项目时),我检索文本并将其放在EditText中,以便用户可以在需要时对其进行修改。禁用的Android AutoCompleteTextView用户之后,从下拉选择项下

然而,当我打电话setText()上TextView的自动完成功能的行为被触发,并且下拉再次显示。如果用户使用键盘输入新文本,我只想显示下拉菜单。有没有办法做到这一点?

+0

我做类似的东西这里! http://stackoverflow.com/questions/12854336/autocompletetextview-backed-by-cursorloader – toobsco42

回答

2

经过几个小时的黑客攻击后回答我自己的问题:原来你应该实现自己的OnItemClickListener,而是依靠现有的点击侦听器来填充TextView。我最初实现了onItemClickListener,因为它使用Cursor.toString()的结果来填充文本视图。要更改输出字符串,您应该在CursorAdapter中实现convertToString(Cursor)。返回的CharSequence将填充到文本视图中。

这样做还可以防止再次显示出来的下拉菜单(自的setText()触发完成的行为,但默认onItemClickListener没有)。

13

可以使用AutoCompleteTextView对象的dismissDropDown()方法。看看documentation

+0

我想阻止显示下拉直到键入新键。如果我使用dismissDropDown(),下拉菜单在被解雇之前会短暂显示。 – magneticMonster

+0

如果您将方法调用放在onItemClickListener()中,那么当您单击某个项目时,它应该关闭该列表。这不是你想要的吗? –

6

如果你想解散AutoCompleteTextView的下拉列表,你应该使用它的post(Runnable r)方法。它为我:)

下面是一个例子:

mAutoCompleteTextView.post(new Runnable() { 
    public void run() { 
     mAutoCompleteTextView.dismissDropDown(); 
    } 
} 
+0

我还在我的活动中添加了onConfigurationChanged中的相同片段 –