我的应用中有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));
}
});
}
}
答案 0 :(得分:46)
是的......遗憾的是,您必须实现的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
}
});
有关详细信息,请参阅:http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html
答案 1 :(得分:40)
arg0
成为您的AdapterView
和arg2
职位。
你试过了吗?
arg0.getItemAtPosition(arg2);
答案 2 :(得分:8)
我认为你在寻找的是这个。
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
中选择的国家/地区。
希望这有帮助。
答案 3 :(得分:4)
最简单的
对于在AutoCompleteTextView中获取所选建议的文本,请使用此
autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.e("========>>", autoCompleteTextView.getText().toString());
}
});
答案 4 :(得分:3)
试试这个:
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);
}
});
答案 5 :(得分:2)
在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);
}
答案 6 :(得分:1)
以下是解决问题的代码。
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)。
答案 7 :(得分:0)
获取用户选择的显示项目的文本
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)
答案 8 :(得分:0)
还有一种方法可以使物品不在onItemClick
之外:
int index = tv.getListSelection();
if (index != ListView.INVALID_POSITION) {
Object item = tv.getAdapter().getItem(index);
}
请注意,如果没有下拉列表或没有选择,int getListSelection()
可能会返回ListView.INVALID_POSITION
。