如何从AutoCompleteTextView获取文本?
-
26-10-2019 - |
题
我有一个 AutoCompleteTextView
在我的应用程序中有效。我已经成功创建了 onClickItemListener
. 。问题是如何获取用户选择的文本。
这就是事情:我有一个 ArrayList
单词传递给 Adapter
搜索建议。当用户键入单词时,建议列表变得较短(在UI侧行),因此当我想从 ArrayList
在索引上,用户选择的用户我会遇到错误的单词,因为索引不匹配。
我如何获取文字(String
)用户选择而不必弄乱索引?
这是我的代码:
public class AutocompleteActivity extends BaseActivity {
private DBManager m_db;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.autocomplete);
m_db = new DBManager(this);
final ArrayList<String> words = m_db.selectAllWords();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.listitem, words);
AutoCompleteTextView tv = (AutoCompleteTextView)findViewById(R.id.autocomplete);
tv.setThreshold(1);
tv.setAdapter(adapter);
tv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Log.i("SELECTED TEXT WAS------->", words.get(arg2));
}
});
}
}
解决方案
arg0
是你的 AdapterView
和 arg2
位置。
你有没有尝试过:
arg0.getItemAtPosition(arg2);
其他提示
是的...不幸的是,您必须实现的OnItemClick方法上的参数名称并不是自我描述的,但以下是一个示例,其名称是它们的名称:
autoCompleteTextView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long rowId) {
String selection = (String)parent.getItemAtPosition(position);
//TODO Do something with the selected text
}
});
- 亲自点击发生的适配视图。
- 查看单击的AdapterView中的视图(这将是适配器提供的视图)
- 将视图位置定位在适配器中
- ID点击的项目的行ID。
有关更多信息,请参见: http://developer.android.com/reference/android/widget/adapterview.onitemclicklistener.html
我认为您正在寻找的是这个。
String s = this.mCountry.getEditableText().toString();
在哪里 mCountry
是个 AutoCompleteTextView
.
this.mCountry = (AutoCompleteTextView) findViewById(R.id.autocomplete_country);
ArrayAdapter<String> adapterCountry = new ArrayAdapter<String>(this, R.layout.list_item, countries);
this.mCountry.setAdapter(adapterCountry);
mCountry
是国家清单,我想拯救选定的国家 SharedPreferences
.
希望这可以帮助。
最简单
要在AutoCompleteTextView中获取所选建议的文本,请使用此
autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.e("========>>", autoCompleteTextView.getText().toString());
}
});
尝试这个:
txtPurpose.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Purpose selected = (Purpose) arg0.getAdapter().getItem(arg2);
txtPurpose.setTag(selected);
}
});
彼此之间选择了建议的文本 AutoCompleteTextView
是
@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id)
{
TextView txtvw=(TextView) view;
String str=txtvw.getText().toString();
int index = contactNames.indexOf(str);
}
这是将解决问题的代码。
private AdapterView.OnItemClickListener onItemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
int index = (int) view.getTag();
Object item = parent.getItemAtPosition(index);
if (item instanceof SearchItemShareConnectionDAO) {
SearchItemShareConnectionDAO dao = (SearchItemShareConnectionDAO) item;
}
}
};
适配器的getView()方法中的settag(dao.getPosition)。
获取用户选择的显示项目的文本
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
String selectedItemText = arg0.getItemAtPosition(arg2);
Log.i("myTag", "SELECTED TEXT WAS["+selectedItemText+"]);
}
遵循最佳实践,请为您的变量使用某种形式的描述性命名法,您的代码将更有意义:
public void onItemClick(AdapterView<?> adapterViewIn, View viewIn, int selectedItemIndexIn, long id)
还有一种方法可以将物品放在外面 onItemClick
:
int index = tv.getListSelection();
if (index != ListView.INVALID_POSITION) {
Object item = tv.getAdapter().getItem(index);
}
当心 int getListSelection()
可以返回 ListView.INVALID_POSITION
如果没有下拉或没有选择。