我有一个场景,我想在用户键入内容时过滤数据。 我目前正在使用微调器,但我想要的是用户应该能够在微调器本身上写入数据,并在运行时过滤数据。我找不到与我想要的类似的东西。
类似于下图(它是在 ASP.net 中使用的 RadcomboBox 的示例)。
最佳答案
您可以使用 Edittext 和 Listview 来实现
当您在 EditText 框中键入时,Listview 将刷新数据。
考虑初始 ArrayList<String> Citylist
载入 CityAdapter
就像下面的代码。
CityAdapter adapter = new CityAdapter(getActivity(), R.layout.customlayout, Citylist );
listview.setAdapter(adapter);
当您在 EditText Box 中键入时, ListView 将刷新数据 - 使用以下代码
et_search.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(!s.toString().equals(""))
{
filterlist = new ArrayList<String>();
filterlist= getFilter(s.toString());
CityAdapter adapter = new CityAdapter(getActivity(), R.layout.customlayout, filterlist);
listview.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
else
{
CityAdapter adapter = new CityAdapter(getActivity(), R.layout.customlayout, Citylist);
listview.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
}
});
Listview 过滤函数如下 -
public ArrayList<String> getFilter(CharSequence charSequence)
{
ArrayList<String> filterResultsData = new ArrayList<String>();;
if(charSequence == null || charSequence.length() == 0)
{
return null;
}
else
{
for(String data : Citylist)
{
//In this loop, you'll filter through originalData and compare each item to charSequence.
//If you find a match, add it to your new ArrayList
//I'm not sure how you're going to do comparison, so you'll need to fill out this conditional
if(data.toLowerCase().contains(charSequence))
{
filterResultsData.add(data);
}
}
}
return filterResultsData;
}
关于android - 为微调器添加过滤器并过滤微调器本身的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36169944/