アプリにAutoCompleteTextView
があり、動作します。 onClickItemListener
を作成しました。問題は、ユーザーが選択したテキストを取得する方法です。
これが問題です:ArrayList
があり、単語をAdapter
に渡して提案を検索しています。ユーザーがWordを入力すると、候補リストが(UI側の行で)短くなるため、ユーザーが選択したインデックスのArrayList
からWordを取得したい場合、インデックスは一致しません。
ユーザーが選択したテキスト(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
}
});
詳細については、 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
で選択された提案テキストを取得するもう1つの方法は、
@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)。
onItemClick
の外にアイテムを取得する方法もあります:
_int index = tv.getListSelection();
if (index != ListView.INVALID_POSITION) {
Object item = tv.getAdapter().getItem(index);
}
_
ドロップダウンがない場合、または選択がない場合、int getListSelection()
は_ListView.INVALID_POSITION
_を返す場合があることに注意してください。
ユーザーが選択した表示項目のテキストを取得するには
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)