【问题标题】:Filterable listview is returning null on a baseadapter可过滤的列表视图在 baseadapter 上返回 null
【发布时间】:2014-05-21 10:06:12
【问题描述】:

谁能看到导致 logcat 返回 null 的原因,因为它没有告诉我任何有用的信息。在我尝试添加过滤器之前它一直在工作,现在它甚至在列表视图上显示数据之前就崩溃了。

public class PostDetailsAdapter extends BaseAdapter implements Filterable {
private static List<PostDetails> PostsArray;
List<PostDetails> mOriginalValues;

private LayoutInflater mInflater;

public PostDetailsAdapter(Context context, List<PostDetails> results) {
    PostsArray = results;
    mInflater = LayoutInflater.from(context);
}

public int getCount() {
    return PostsArray.size();
}

public Object getItem(int position) {
    return PostsArray.get(position);
}

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

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.post_row, null);

        holder = new ViewHolder();
        holder.Title = (TextView) convertView.findViewById(R.id.title);
        holder.Date = (TextView) convertView.findViewById(R.id.date);
        holder.Description = (TextView) convertView.findViewById(R.id.description);
        holder.Author = (TextView) convertView.findViewById(R.id.author);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.Title.setText(PostsArray.get(position).getTitle());
    holder.Date.setText(PostsArray.get(position).getDate());
    holder.Description.setText(PostsArray.get(position).getDescription());
    holder.Author.setText(PostsArray.get(position).getAuthor());

    holder.Title.setTextColor(Color.BLACK);
    holder.Date.setTextColor(Color.BLACK);
    holder.Description.setTextColor(Color.BLACK);
    holder.Author.setTextColor(Color.BLACK);

    return convertView;
}

static class ViewHolder {
    TextView Title;
    TextView Date;
    TextView Description;
    TextView Author;
}

@Override
public Filter getFilter() 
{
    Filter filter = new Filter() 
    {

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint,FilterResults results) 
        {

            PostsArray = (List<PostDetails>) results.values;
            notifyDataSetChanged();
        }

        @Override
        protected FilterResults performFiltering(CharSequence constraint) 
        {
            FilterResults results = new FilterResults();
            List<PostDetails> FilteredArrList = new ArrayList<PostDetails>();

            if (mOriginalValues == null) 
            {
                System.out.println("");
                mOriginalValues = new ArrayList<PostDetails>(PostsArray);
            }

            if (constraint == null || constraint.length() == 0) 
            {

                // set the Original result to return  
                results.count = mOriginalValues.size();
                results.values = mOriginalValues;
            } 
            else 
            {
                constraint = constraint.toString().toLowerCase();
                for (int i = 0; i < mOriginalValues.size(); i++) 
                {
                    PostDetails data = mOriginalValues.get(i);
                    if (data.getTitle().toLowerCase().contains(constraint.toString())) 
                    {
                        FilteredArrList.add(data);
                    }
                }
                results.count = FilteredArrList.size();
                results.values = FilteredArrList;
            }
            return results;
        }
    };
    return filter;
}
}

【问题讨论】:

    标签: java android listview filter baseadapter


    【解决方案1】:

    结果证明代码没有任何问题,我试图在完全设置列表视图之前将过滤器应用于此列表视图。不完全理解 AsyncTask 的乐趣:)

    【讨论】:

      猜你喜欢
      • 2013-07-17
      • 1970-01-01
      • 2012-09-01
      • 2017-08-03
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多