自动完成文本视图在android中的某些情况下不显示结果

自动完成文本视图在android中的某些情况下不显示结果,android,arraylist,android-arrayadapter,autocompletetextview,Android,Arraylist,Android Arrayadapter,Autocompletetextview,我的android活动中有一个自动完成文本视图,其中的结果是通过在arrayadapter中传递字符串arraylist获得的。字符串arraylist包含以下格式的元素: city-name-country(code) 例如,字符串arraylist中的一个条目如下所示: Cochin-Kochi International Airport-India(COK) 当我开始输入字符时,它开始显示基于city的字符串数组列表的结果,但是如果我需要基于codeiecok的结果,我应该在代码中做什

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

city-name-country(code)
例如,字符串arraylist中的一个条目如下所示:

Cochin-Kochi International Airport-India(COK)
当我开始输入字符时,它开始显示基于
city
的字符串数组列表的结果,但是如果我需要基于
code
ie
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);

正如simon提到的,您需要为
ArrayAdapter
定制过滤器,以更改过滤逻辑的工作方式。不幸的是,对于刚接触适配器的人来说,这不是一项容易的任务。此外,即使您可以覆盖过滤器并更新逻辑,也不应该这样做。它可能导致许多其他问题。我建议从这里使用
ArrayBaseAdapter
。它与使用
ArrayAdapter
类似,但提供了一种简单的实现方法,允许您指定过滤逻辑的行为方式。

您必须创建一个自定义ArrayAdapter,并覆盖
getFilter()
performFiltering()
方法。这里有一个例子:你能帮我提供代码吗,因为我是新手…请参阅my edit@SimonMarquis。你不必使用
addTextChangedListener
,使用前面解释的过滤方法。你能帮我实现带有过滤的自定义数组适配器吗,因为我是这个领域的新手。你不会为每一个文本更改创建一个新的适配器。保持列表和适配器不变,并调用
适配器#getFilter().filter(约束)
。如果您想自定义搜索逻辑,请查看我在回答中提供的链接
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) {

            }
        });