2011-01-27 92 views
27

我在我的应用程序中有一个AutoCompleteTextView工作。我已经成功创建了一个onClickItemListener。问题是如何抓住用户选择的文本。这是事情:我有一个ArrayList的单词传递给适配器搜索建议。当用户键入一个单词时,建议列表变得更短(在UI侧的行中),所以当我想从用户选择的索引处的ArrayList中获取单词时,我得到错误的单词,因为索引不匹配。我怎样才能得到用户选择的文本(字符串),而不必乱搞索引?这里是我的代码:如何从自动完成textview中获取文本android

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

感谢您添加此代码段,它帮助我花了将近6个小时的时间。 +1代表 – Android 2012-03-09 11:07:53

+0

代码工作。对于像我这样的初学者来说,小贴士粘贴此代码后,单击该字段并键入一个字母以查看建议框下来。我确实粘贴了代码,点击提交的内容,并等待POPUP的建议框,它永远不会打开。但是有showDialogBox()方法来显示POPUP。 – Pravin 2017-03-03 05:47:11

回答

36

arg0成为您AdapterViewarg2位置。

你试过:

arg0.getItemAtPosition(arg2); 
+0

我正在寻找由用户选择的文本,而不是ID – 2015-05-21 14:07:47

+0

arg3是数据库中的ID。我们可以直接使用它 – Vijay 2015-07-07 07:01:47

40

呀...不幸的是在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 
    } 
}); 
  • 父在点击发生的适配器视图。
  • 查看内 该视图被点击的适配器视图(这将是由 适配器提供的视图)
  • 位置的视图的在适配器
  • 标识的项的行ID单击的位置。

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

8

我想你在找什么是这样的。

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选择的国家。

希望这会有所帮助。

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

最简单的所有

为了获得所选择的建议的文本在AutoCompleteTextView中使用这个

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

     } 
    } 
}; 

SetTag(Dao.getPosition)in getView()方法的适配器。

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) 
相关问题