Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在android中使用微调器过滤Listview_Java_Android - Fatal编程技术网

Java 在android中使用微调器过滤Listview

Java 在android中使用微调器过滤Listview,java,android,Java,Android,我有一个包含文本和图像的列表视图。每个列表项包含四个关键元素。我希望能够通过从微调器中选择的选项,使用三个文本视图中的任意一个来过滤listview。这就是我到目前为止所做的: public class LazyVenueAdapter extends BaseAdapter implements Filterable { private Activity activity; private ArrayList<HashMap<String,

我有一个包含文本和图像的列表视图。每个列表项包含四个关键元素。我希望能够通过从微调器中选择的选项,使用三个文本视图中的任意一个来过滤listview。这就是我到目前为止所做的:

    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()。我很高兴我的建议有所帮助。请检查最佳答案是否正确,让社区知道您的问题已解决,并给予回答者一点声誉