39

我的应用程序中有一个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));
            }
        });
    }
}
4

9 回答 9

55

是的......不幸的是,您必须实现的 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 中的视图(这将是适配器提供的视图)
  • position 视图在适配器中的位置
  • id 单击的项目的行 id。

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

于 2012-02-15T00:26:22.633 回答
46

arg0成为你AdapterViewarg2位置。

你有没有尝试过:

arg0.getItemAtPosition(arg2);
于 2011-01-27T18:23:05.683 回答
8

我想你正在寻找的是这个。

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

希望这可以帮助。

于 2012-05-04T10:10:23.960 回答
4

最简单的

对于在 AutoCompleteTextView 中获取所选建议的文本,请使用此

      autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.e("========>>", autoCompleteTextView.getText().toString());
        }
    });
于 2016-04-18T13:29:30.520 回答
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);
        }
    });
于 2015-05-12T08:24:10.803 回答
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);
} 
于 2015-05-14T05:23:03.783 回答
2

这是解决问题的代码。

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

于 2016-05-20T09:48:07.120 回答
2

获取用户选择的显示项目的文本

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) 
于 2016-12-29T19:12:27.003 回答
1

还有一种方法可以在 之外获取项目onItemClick

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

请注意,如果没有下拉菜单或没有选择,int getListSelection()则可能会返回。ListView.INVALID_POSITION

于 2018-10-31T11:36:58.327 回答