如何从自动完成textview的android文本

我有一个AutoCompleteTextView在我的应用程序的作品。 我已经成功地创build了一个onClickItemListener。 问题是如何抓住用户select的文本。 这是事情:我有一个ArrayList与单词传递给适配器searchbuild议。 当用户input一个单词时,build议列表变得更短(在UI一侧的行中),所以当我想从用户select的索引处的ArrayList中获取单词时,由于索引不匹配,我得到了错误的单词。 我怎样才能得到用户select的文本(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)); } }); } } 

  • android如何在适配器内调用startActivityForResult
  • 在自定义AdapterView中实现onMeasure()和onLayout()的正确方法
  • RecyclerView - 我应该在哪里处理点击事件?
  • 由android.widget.RelativeLayout android不正确地调用requestLayout()
  • 图库/ AdapterView儿童可绘制状态
  • 设置android:windowBackground到@null使滚动拖动?
  • arg0是你的AdapterViewarg2的位置。

    你有没有尝试过:

     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。
    • 查看被点击的AdapterView中的视图(这将是适配器提供的视图)
    • 位置视图在适配器中的位置
    • id被点击的项目的行ID。

    欲了解更多信息,请参阅: http : //developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html

    我觉得你要找的是这个。

     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是国家列表,我想保存在SharedPreferencesselect的国家。

    希望这可以帮助。

    尝试这个:

     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中选定的build议的文本使用此

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

    获取在AutoCompleteTextView中select的build议文本的另一个是

     @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()方法中设置标签(Dao.getPosition)。

    获取用户select的显示项目的文本

     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { String selectedItemText = arg0.getItemAtPosition(arg2); Log.i("myTag", "SELECTED TEXT WAS["+selectedItemText+"]); } 

    遵循最佳实践,请为variables使用某种forms的描述性术语,您的代码将更有意义:

     public void onItemClick(AdapterView<?> adapterViewIn, View viewIn, int selectedItemIndexIn, long id)