如何从AutoCompleteTextView获取文本?

时间:2011-01-27 17:37:39

标签: android android-adapterview

我的应用中有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));
            }
        });
    }
}

9 个答案:

答案 0 :(得分:46)

是的......遗憾的是,您必须实现的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。
  • 查看内部视图 单击的AdapterView(这将是由。提供的视图) 适配器)
  • position视图在适配器中的位置
  • id已点击的项目的行ID。

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

答案 1 :(得分:40)

arg0成为您的AdapterViewarg2职位。

你试过了吗?

arg0.getItemAtPosition(arg2);

答案 2 :(得分: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 :(得分:4)

最简单的

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

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

答案 4 :(得分: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);
        }
    });

答案 5 :(得分: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);
} 

答案 6 :(得分: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;

        }
    }
};

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

答案 7 :(得分: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) 

答案 8 :(得分:0)

还有一种方法可以使物品不在onItemClick之外:

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

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