如何在填充了数组的AutoCompleteTextView中找到项目的位置

24

我有一个数组 (array1,其中包含States)和AutoCompleteTextView,我正在用array1填充它。当我从AutocompleteTextView选择值时,我从AutoCompleteTextView Dropdown中选择一个state

我想做的是获得我所选项在array1中的位置
我尝试过使用AutocompelteTextViewOnClickEvent

STATE.setOnItemClickListener(new OnItemClickListener(){

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long rowId) {
        String selection = (String) parent.getItemAtPosition(position);
        String num = selection;
    }
});
它给了我从下拉菜单中选择的值,但我想要获取在array1中的位置。例如,我有一个大小为4的数组,如array1={A,B,C,D},如果我选择B,它应该返回B在数组中的位置,即2。
希望我表述清楚了。先谢谢了。

您可以在onItemClick监听器中使用int position变量来表示值的位置。 - Chirag
Item.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //// id 包含来自数据库的项目编号 ItemNoSelected = id; } }); --- 这里的id是来自数据库的编号 - Vijay
5个回答

31

onItemClick 中使用 position 变量。

STATE.setOnItemClickListener(new OnItemClickListener(){

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long rowId) {
        String selection = (String) parent.getItemAtPosition(position);
        int pos = -1;

        for (int i = 0; i < yourarray.length; i++) {
            if (yourarray[i].equals(selection)) {
                pos = i;
                break;
            }
        }
        System.out.println("Position " + pos); //check it now in Logcat
    }
});

1
这并没有给我正确的位置 我想要从数组中获取变量的位置,但它给出了来自AutocompleteDropdown的位置 - raghav chopra
但如果它不是Array,而是ArrayList<String>呢? - raghav chopra
5
问题在于自动完成提示中存在两个完全相同的名称。 - Marlon
记住,永远不要比较字符串。 - kemdo

3

使用List代替Array。为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 ;)
     }
});

0
            @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);
            } 

0
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来自数据库,我们可以使用它


-3

您可以在clickItem监听器中找到父字符串。 在这种情况下,OSchools是自定义ArrayList。

Object item = parent.getItemAtPosition(position);
for(OSchools d : data){
Log.e("name",d.getName());
String name = d.getName();
if(d.getName() != null && name.contains(item.toString())){
       ID = d.getID();
}

1
仅基于代码的答案不被视为适当的 SO 答案。您能否为您的代码添加说明?(来自审查) - FrankS101

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