如何获取AutoCompleteTextView中所选文本的索引

21
AutoCompleteTextView mActv = (AutoCompleteTextView) findViewbyId(R.id.m_actv);
ArrayAdapter<String> AutoCompleteAdapter = new ArrayAdapter<String>(this,
                    R.layout.dropdown_text, Names);
mActv.setAdapter(AutoCompleteAdapter);

Names 是一个字符串数组。

是否可以获取从下拉列表中选择的文本的索引

谢谢。


你找到解决方案了吗? - Accollativo
1
尝试查看https://dev59.com/6G445IYBdhLWcg3wg6pm。 - user4232597
Solution: https://dev59.com/6G445IYBdhLWcg3wg6pm#37343444 - Shivang
我认为你的问题的解决方案在这里。请查看。 - Shanaka Nuwan
4个回答

6

只需将OnItemClickListener(用于点击的项目)或OnItemSelectedListener(用于使用轨迹球、上/下键选择的项目)添加到AutoCompleteTextView即可。

mActv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View arg1, int pos,
                long id) {
              String item = arg1.getItemAtPosition(pos);
               //your stuff
           }
    });

12
好的。这是我尝试过的第一件事。但是这里给出的是从下拉列表中选择的文本的位置,而不是我用来填充的数组中字符串的索引位置 :( - Archie.bpgc
顺序不是保持不变吗?我的意思是在数组和下拉列表中,它们的顺序是一样的吧? - Shashank Kadne
1
但是根据我输入的前几个字符,下拉菜单会发生变化(这是AutoCompleteTextView的预期行为)。 - Archie.bpgc
我遇到了你所面临的同样问题,我做了一个自定义适配器,你可以设置对象而不是字符串,这样你就可以访问所选对象的变量。 - user3471194
1
String item = parent.getItemAtPosition(pos); This is the correct answer, Its not arg1.getItemAtPosition - Naveen Kumar M

3

为AutoCompleteTextView实现onItemClickListener,然后使用indexOf在您的列表中查找所选项目的索引。

actvCity.setOnItemClickListener(new OnItemClickListener() {

     @Override
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
          long arg3) {
          int index = cityNames.indexOf(actvCity.getText().toString());
          // Do Whatever you want to do ;)
     }
});

AutoCompleteTextView上没有indexOf方法! - aidinMC

2

18
这总是返回**-1。这就是你提供的链接中给出的ListView.INVALID_POSITION**。 - Archie.bpgc
这在下拉列表打开时有效,但是你提出了一个棘手的问题,因为列表(因此索引)取决于AutoCompleteTextView的输入... 如果NamesList<String>,那么您可以使用indexOf()来查找字符串被选中后的位置。 - Sam
4
我发现getListSelection()始终返回-1,即使AutoCompleteTextView可见并且已选择某项。难道是我疯了吗? - drmrbrewer

1
Item.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    //// id contains item if from database
                    ItemNoSelected = id;
                }
            });

id是来自数据库的,我们可以使用它


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接