Autocompletetextview在android中的某些情况下不显示结果

时间:2014-08-23 11:07:00

标签: android arraylist android-arrayadapter autocompletetextview

我的android活动中有一个自动完成的textview,其中的结果是通过在arrayadapter中传递字符串arraylist获得的。字符串arraylist包含以下格式的元素:

city-name-country(code)

例如字符串arraylist中的一个条目是这样的:

Cochin-Kochi International Airport-India(COK)

当我开始输入字符时,它开始显示基于city的字符串arraylist的结果但是如果我需要根据code得到结果,即cok应该更改我在代码中制作?我的意思是,即使用户输入城市或代码,用户也应该获得结果。在我输入cok的情况下,在我的情况下,自动完成文本视图中没有显示任何结果。但实际上有一个条目对应于人物可乐即高知国际机场。但是我无法得到这个结果。有人可以帮助我......这是我的自动完成文本视图的代码:

actv1=(AutoCompleteTextView)rootView.findViewById(R.id.autoCompleteTextView1);
loc=SplashScreen.loc;//obtained from a static arraylist in another activity.
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,loc);
actv1.setAdapter(adapter);

编辑:

我已将以下代码添加到我的程序中,问题是当我键入COK时,结果Cochin-Kochi International Airport-India(COK)只是闪烁不到1秒,作为自动完成文本视图中的建议,之后它消失了。该建议仅显示不到1秒,并且在自动完成文本视图中不显示任何内容。我实现的代码中可能出现的错误是什么?

actv1.addTextChangedListener(new TextWatcher() {

             @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {

                 String filter = s.toString().toLowerCase();
                listItems = new ArrayList<String>();
                for (String listItem : loc) {
                    if (listItem.toLowerCase().contains(filter))
                    {
                        listItems.add(listItem);

                    }

                }
                if (listItems.size() < 1){

                Toast toast = Toast.makeText(getActivity().getApplicationContext(),
                        "No entries contain your search parameters",
                        Toast.LENGTH_SHORT);

                toast.show();

                }
                ArrayAdapter<String> adapt=new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,listItems);
                actv1.setAdapter(adapt);

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

1 个答案:

答案 0 :(得分:1)

正如simon所提到的,您需要为ArrayAdapter自定义过滤器,以便更改过滤逻辑的工作方式。不幸的是,对于适配器的新手来说,这不是一件容易的事。此外,即使你可以覆盖过滤器并更新逻辑,你也不应该这样做。它可能导致许多其他问题。我建议您使用此opensource repo中的ArrayBaseAdapter。它就像使用ArrayAdapter一样,但它提供了一种简单的实现方法,允许您指定过滤逻辑的行为方式。