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
ドロップダウンがない場合、または選択がない場合。