我有一个 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 是你的 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中的视图(这将是适配器提供的视图)
  • 将视图位置定位在适配器中
  • 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 如果没有下拉或没有选择。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top