【发布时间】:2014-08-23 11:07:00
【问题描述】:
我的 android 活动中有一个自动完成文本视图,其中的结果是通过在 arrayadapter 中传递一个字符串 arraylist 来获得的。字符串 arraylist 包含以下格式的元素:
city-name-country(code)
例如字符串arraylist中的一个条目是这样的:
Cochin-Kochi International Airport-India(COK)
当我开始输入字符时,它开始显示基于city 的字符串数组列表的结果,但是如果我需要根据code 即cok 获得结果,我应该在代码中进行哪些更改?我的意思是,即使输入城市或代码,用户也应该得到结果。在我的情况下,当我输入 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) {
}
});
【问题讨论】:
-
您必须创建一个自定义 ArrayAdapter,并覆盖
getFilter()performFiltering()方法。这是一个例子:gist.github.com/tobiasschuerg/3554252 -
你能帮我提供代码吗,因为我是新手...
-
查看我的编辑@SimonMarquis。
-
你不必使用
addTextChangedListener,使用它前面解释的过滤方法
标签: android arraylist android-arrayadapter autocompletetextview