首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带Searchview的Listview。过滤问题

带Searchview的Listview。过滤问题
EN

Stack Overflow用户
提问于 2016-03-18 07:25:04
回答 1查看 107关注 0票数 0

我试图在工具栏中实现搜索视图。到目前为止一切都很顺利。

当我搜索结果时,问题就出现了。我明白这个例外

代码语言:javascript
运行
复制
Attempt to read from field 'int android.widget.Filter$FilterResults.count' on a null object reference

下面是适配器类代码

代码语言:javascript
运行
复制
public class CustomListAdapter extends BaseAdapter implements Filterable {
Context context;
MainDTO values;
LayoutInflater inflater;
List<PostsDTO> list;

CustomFilter customFilter;

public CustomListAdapter(Context context, MainDTO values) {
    this.context = context;
    this.values = values;
    list=values.getPosts();
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
    return values.getPosts().size();
}

@Override
public Object getItem(int position) {
    return position;
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder = null;

    final ImageLoader imageLoader = ImageLoader.getInstance();
    if (convertView == null) {
        viewHolder = new ViewHolder();
        convertView = inflater.inflate(R.layout.item_list, parent, false);
        viewHolder.category = (TextView) convertView.findViewById(R.id.category);
        viewHolder.title = (TextView) convertView.findViewById(R.id.article_title);
        viewHolder.date = (TextView) convertView.findViewById(R.id.date);
        viewHolder.comment = (TextView) convertView.findViewById(R.id.comment);
        viewHolder.imageView = (ImageView) convertView.findViewById(R.id.image);
        viewHolder.imgcoment = (ImageView) convertView.findViewById(R.id.imgcomment);
        viewHolder.author_pic = (RoundedImageView) convertView.findViewById(R.id.author_pic);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }
    if (!values.getPosts().get(position).getCategories().isEmpty()) {
        viewHolder.category.setText(list.get(position).getCategories().get(0).getTitle());
    }
    viewHolder.title.setText(Html.fromHtml(list.get(position).getTitle()));
    viewHolder.date.setText(list.get(position).getDate());
    viewHolder.comment.setText("" +list.get(position).getCommentCount());
    if (list.get(position).getThumbnail_images() != null) {
        imageLoader.displayImage(list.get(position).getThumbnail_images().getFull().getUrl(), viewHolder.imageView);
    }
    final String hash = GravatarMD5.md5Hex(list.get(position).getAuthor().getEmail());
    imageLoader.displayImage(Constants.URL_BASE_GRAVATAR + hash, viewHolder.author_pic);
    viewHolder.imgcoment.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent intent = new Intent(context, DisqusCommentsActivity.class);
            intent.putExtra("postUrl", list.get(position).getUrl());
            intent.putExtra("title", list.get(position).getTitle());
            context.startActivity(intent);

        }
    });
    viewHolder.author_pic.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(context, ProfileActivity.class);
            intent.putExtra("hash", hash);
            intent.putExtra("authorName", list.get(position).getAuthor().getName());
            intent.putExtra("authorId", list.get(position).getAuthor().getId());
            context.startActivity(intent);


        }
    });
    return convertView;
}

@Override
public Filter getFilter() {
    if (customFilter == null)
        customFilter = new CustomFilter();
    return customFilter;
}

private static class ViewHolder {
    public TextView category;
    public TextView title;
    public TextView date;
    public TextView comment;
    public ImageView imageView;
    public ImageView imgcoment;
    public RoundedImageView author_pic;
}

以下是filer类的代码

代码语言:javascript
运行
复制
public class CustomFilter extends Filter {

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults results = new FilterResults();
            // We implement here the filter logic
            if (constraint == null || constraint.length() == 0) {
                results.values = values.getPosts();
                results.count = values.getPosts().size();

            } else {

                List<PostsDTO> postsDTOs = new ArrayList<PostsDTO>();

                for (PostsDTO p : values.getPosts()) {
                    if (p.getTitle().toUpperCase().startsWith(constraint.toString().toUpperCase()))

                        postsDTOs.add(p);
                }
                results.values = values.getPosts();
                results.count = values.getPosts().size();
            }
            return null;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            if (results.count == 0)//Exception here
                notifyDataSetInvalidated();
            else {
                list = (List<PostsDTO>) results.values;
                notifyDataSetChanged();
            }
        }
    }

在上面的类if (results.count == 0)//Exception here中,这一行出现异常

怎么解决它有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-18 07:30:24

performFiltering方法中,返回null而不是results对象。然后,您将访问null上的count属性,这会引发异常。

results方法中尝试返回performFiltering而不是null。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36078462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档