自动完成文本视图在android中的某些情况下不显示结果
我的android活动中有一个自动完成文本视图,其中的结果是通过在arrayadapter中传递字符串arraylist获得的。字符串arraylist包含以下格式的元素:自动完成文本视图在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的结果,我应该在代码中做什
city-name-country(code)
例如,字符串arraylist中的一个条目如下所示:
Cochin-Kochi International Airport-India(COK)
当我开始输入字符时,它开始显示基于city
的字符串数组列表的结果,但是如果我需要基于code
iecok
的结果,我应该在代码中做什么更改?我的意思是,用户应该得到结果,即使他键入城市或代码。在我的情况下,当我键入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) {
}
});