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