以编程方式选择AutoCompleteTextView项目

Hus*_*ine 5 android adapter autocompletetextview

我有一个自动填充的文本视图,该视图充满了来自sqlite数据库的城市,该城市在项目单击时调用了异步任务,最近我添加了一个选项来使用gps检测我的位置,所以问题是我可以检测到城市(即贝鲁特)并为autocompletetextview设置文本,但事实是下拉过滤器打开,显示贝鲁特(正确),但是我仍然需要单击列表项以调用侦听器,如何以编程方式执行此操作

如何:输入活动(完成)检测位置(完成)设置文本视图的文本(完成)显示文本视图下拉列表(完成)选择将要返回的项目,因为它将仅返回一个城市(未完成)

问候,

use*_*762 13

一个解决方案是您不需要更改 API 级别。

automCompleteTextView.setAdapter(adapter);        
// set default selection, filtering is active so all items is not visible in drop-down menu
automCompleteTextView.setText(automCompleteTextView.getAdapter().getItem(0).toString());
// change filtering for the adapter so all items can be visible in drop-down menu
adapter.getFilter().filter(null);
Run Code Online (Sandbox Code Playgroud)

同一作业的单线,但需要更高的 API 级别

automCompleteTextView.setText(automCompleteTextView.getAdapter().getItem(0).toString(), false);
Run Code Online (Sandbox Code Playgroud)


JHo*_*zer 12

需要明确的是,塔诺的解决方案足以回答这个问题。但是,如果其他人遇到了与我相同的用例,这里有一些其他背景可能会帮助您...

我在尝试制作一个不可编辑的“ Material Exposed”下拉菜单并以编程方式设置其初始值时遇到了这个问题。可以在此处的“暴露的下拉菜单”部分中找到用于创建这种“下拉列表”类型的文档,该文档建议了一种使用TextInputLayout和的机制AutocompleteTextView(即使您不希望自动完成功能)。

失败的解决方案1: 乍一看setListSelection()getListSelection()似乎他们可以解决问题。但是经过多次试验,我了解到它们可能不够用,因为它们仅在列表弹出时才起作用isShowing()。因此,例如,如果您只想设置初始选择而不必先显示列表弹出窗口,则此操作将无效。

解决方案2失败: 然后,我尝试setText()在文本框中显示正确的文本。好极了!可是等等!当我单击文本视图时,由于某种原因,列表弹出窗口中仅显示选项的子集。怎么会这样 这里要记住的关键是,由于这是一个自动完成的文本视图,因此默认情况下它会根据文本视图中的文本过滤掉选项。这可能并不明显,特别是如果您只是为了制作一个简单的不可编辑的下拉选择器而仅使用此控件。

解决方案: 这将我们带入实际的解决方案(由Tano建议)... setText()使用filteras false将关闭过滤功能,并且不会更改列表弹出窗口的内容。

autoCompleteTextView.setText(myText, false);
Run Code Online (Sandbox Code Playgroud)

  • 这是一个出色的答案并且解释得很好。我遇到的唯一问题是过滤器选项需要 API 级别为 17 (3认同)
  • 我花了几个小时研究这里提到的失败解决方案,现在在开发 Android 应用程序 8 年后,我已经接近职业转变了。 (2认同)

Tan*_*ano 9

我遇到了类似的问题,这解决了我的问题。重要的是调用setText(,)以便不使用给定的文本进行过滤,将第二个参数设置为false。文本将从下拉适配器中获取

解决方案摘要:

automCompleteTextView.setText(automCompleteTextView.getAdapter().getItem(position).toString(), false);
Run Code Online (Sandbox Code Playgroud)


小智 6

我在深入研究了 android 源代码上的 AutoCompleteTextView 代码后发现:

fun AutoCompleteTextView.selectItem(text: String, position: Int = 0) {
  this.setText(text)
  this.showDropDown()
  this.setSelection(position)
  this.listSelection = position
  this.performCompletion()
}
Run Code Online (Sandbox Code Playgroud)


Nit*_*tel -1

尝试在 AutoCompleteTextview 中的 setText() 之后添加以下内容:-

autoCompleteTV.setSelection(position);
Run Code Online (Sandbox Code Playgroud)

更新:

Spinner这将在具有下拉功能的和中工作AutoCompleteTextView,但不适用于EditText.

您可以在此链接中查看文档AbsSpinnerhttps://developer.android.com/reference/android/widget/AbsSpinner.html#setSelection(int)

  • setSelection 是光标放置位置的简写,而不是选择适配器中的项目。 (4认同)