web-dev-qa-db-ja.com

AutoCompleteTextViewからテキストを取得する方法は?

アプリに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));
            }
        });
    }
}
29
madcoderz

arg0はあなたのAdapterViewおよびarg2 位置。

やってみました:

arg0.getItemAtPosition(arg2);
40
djg

ええ...残念ながら、実装する必要がある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
    }
});
  • parentクリックが発生したAdapterView。
  • viewクリックされたAdapterView内のビュー(これはアダプターによって提供されるビューになります)
  • アダプター内のビューの位置
  • idクリックされたアイテムの行ID。

詳細については、 http://developer.Android.com/reference/Android/widget/AdapterView.OnItemClickListener.html を参照してください。

46
Oscar S.

あなたが探しているのはこれだと思います。

String s = this.mCountry.getEditableText().toString();

ここで、mCountryAutoCompleteTextViewです。

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で選択した国を保存したかったのです。

お役に立てれば。

8
Ammar Bukhari

最も簡単なもの

AutoCompleteTextViewで選択した候補のテキストを取得するには、これを使用します

      autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.e("========>>", autoCompleteTextView.getText().toString());
        }
    });
4
RatneZ

これを試して:

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);
        }
    });
3
Mortada Issa

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);
} 
2
Jasmine John

これが問題を解決するコードです。

 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)。

1
Shivang

onItemClickの外にアイテムを取得する方法もあります:

_int index = tv.getListSelection();
if (index != ListView.INVALID_POSITION) {
    Object item = tv.getAdapter().getItem(index);
}
_

ドロップダウンがない場合、または選択がない場合、int getListSelection()は_ListView.INVALID_POSITION_を返す場合があることに注意してください。

0
YTerle

ユーザーが選択した表示項目のテキストを取得するには

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) 
0
tony gil