Java 在android中使用微调器过滤Listview
我有一个包含文本和图像的列表视图。每个列表项包含四个关键元素。我希望能够通过从微调器中选择的选项,使用三个文本视图中的任意一个来过滤listview。这就是我到目前为止所做的:Java 在android中使用微调器过滤Listview,java,android,Java,Android,我有一个包含文本和图像的列表视图。每个列表项包含四个关键元素。我希望能够通过从微调器中选择的选项,使用三个文本视图中的任意一个来过滤listview。这就是我到目前为止所做的: public class LazyVenueAdapter extends BaseAdapter implements Filterable { private Activity activity; private ArrayList<HashMap<String,
public class LazyVenueAdapter extends BaseAdapter implements Filterable {
private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater = null;
public ImageLoader imageLoader;
public LazyVenueAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
activity = a;
data = d;
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader = new ImageLoader(activity.getApplicationContext());
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
if (convertView == null)
vi = inflater.inflate(R.layout.venue_list_item, null);
TextView title = (TextView) vi.findViewById(R.id.venueName);
TextView location = (TextView) vi.findViewById(R.id.venueLocation);
TextView tags = (TextView) vi.findViewById(R.id.venueTags);
ImageView thumb_image = (ImageView) vi.findViewById(R.id.venueImage);
HashMap<String, String> venue = new HashMap<String, String>();
venue = data.get(position);
// Setting all values in listview
title.setText(venue.get(VenuesFragment.KEY_TITLE));
location.setText(venue.get(VenuesFragment.KEY_LOCATION));
tags.setText(venue.get(VenuesFragment.KEY_TAGS));
imageLoader.DisplayImage(venue.get(VenuesFragment.KEY_THUMB_URL),
thumb_image);
return vi;
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
ArrayList<HashMap<String, String>> filteredArrayVenues = new ArrayList<HashMap<String, String>>();
data.clear();
if (constraint == null || constraint.length() == 0) {
results.count = data.size();
results.values = data;
} else {
constraint = constraint.toString();
for (int index = 0; index < data.size(); index++) {
HashMap<String, String> dataVenues = data.get(index);
if (dataVenues.get(VenuesFragment.KEY_TAGS).toString().startsWith(
constraint.toString())) {
filteredArrayVenues.add(dataVenues);
}
}
results.count = filteredArrayVenues.size();
System.out.println(results.count);
results.values = filteredArrayVenues;
Log.e("VALUES", results.values.toString());
}
return results;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
data = (ArrayList<HashMap<String, String>>) results.values;
notifyDataSetChanged();
}
};
return filter;
}
}
公共类LazyVenueAdapter扩展BaseAdapter实现可过滤{
私人活动;
私有数组列表数据;
专用静态充气机=空;
公共图像加载器;
公共LazyVenueAdapter(活动a,ArrayList d){
活动=a;
数据=d;
充气器=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气器\u SERVICE);
imageLoader=新的imageLoader(activity.getApplicationContext());
}
public int getCount(){
返回data.size();
}
公共对象getItem(int位置){
返回位置;
}
公共长getItemId(int位置){
返回位置;
}
@凌驾
public void notifyDataSetChanged(){
super.notifyDataSetChanged();
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图vi=转换视图;
if(convertView==null)
vi=充气机。充气(R.layout.Visite\u list\u项目,空);
TextView title=(TextView)vi.findViewById(R.id.venueName);
TextView位置=(TextView)vi.findViewById(R.id.venueLocation);
TextView标签=(TextView)vi.findViewById(R.id.venueTags);
ImageView拇指图像=(ImageView)vi.findViewById(R.id.venueImage);
HashMap地点=新建HashMap();
地点=数据。获取(位置);
//在listview中设置所有值
title.setText(场地获取(VenuesFragment.KEY_title));
location.setText(场所.get(VenuesFragment.KEY_位置));
tags.setText(场所.get(VenuesFragment.KEY_标记));
imageLoader.DisplayImage(场馆.get(VenuesFragment.KEY\u THUMB\u URL),
拇指图像);
返回vi;
}
@凌驾
公共过滤器getFilter(){
过滤器过滤器=新过滤器(){
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults results=新的FilterResults();
ArrayList FilteredArrayVinces=新建ArrayList();
data.clear();
if(constraint==null | | constraint.length()==0){
results.count=data.size();
结果值=数据;
}否则{
constraint=constraint.toString();
对于(int index=0;index
我遇到的问题是,当我从下拉列表中选择一个选项时,我会返回一个空的结果集。您必须先筛选
ArrayList数据
,然后在适配器中调用notifyDataSetChanged()
您必须先筛选ArrayList数据
,然后在适配器中调用notifyDataSetChanged()
您不会收到任何结果,因为您删除了试图使用数据生成结果的信息。清除()代码>。如果data
现在为空(即data.size()==0
),则此循环将永远不会执行:
for (int index = 0; index < data.size(); index++) {
您没有收到任何结果,因为您使用data.clear()删除了试图从中生成结果的信息代码>。如果data
现在为空(即data.size()==0
),则此循环将永远不会执行:
for (int index = 0; index < data.size(); index++) {
好的,我一定会这样做,看看结果是什么。我仍然存在的问题是,当我从下拉列表中选择一个选项时,我会返回一个空的结果集。好的,我一定会这样做,看看结果是什么。我仍然面临的问题是,当我从下拉列表中选择一个选项时,我会返回一个空的结果集。非常感谢你的建议,完全有帮助。不过,我还得再做一件事才能让它发挥作用;而不是检查标签startswith()和use contains()。我很高兴我的建议有所帮助。请检查最佳答案是否正确,让社区知道您的问题已解决,并奖励回答者一点时间的声誉。(最好的答案很少是完美的,只要选择最有成效的答案即可。)非常感谢你的建议,完全有帮助。不过,我还得再做一件事才能让它发挥作用;而不是检查标签startswith()和use contains()。我很高兴我的建议有所帮助。请检查最佳答案是否正确,让社区知道您的问题已解决,并给予回答者一点声誉