Java baseadapter上的Filterable listview返回null
任何人都可以看到是什么导致logcat返回null,因为它没有告诉我任何有用的信息。它一直在工作,直到我试图添加一个过滤器,现在它崩溃之前,它甚至显示在listview上的数据Java baseadapter上的Filterable listview返回null,java,android,listview,filter,baseadapter,Java,Android,Listview,Filter,Baseadapter,任何人都可以看到是什么导致logcat返回null,因为它没有告诉我任何有用的信息。它一直在工作,直到我试图添加一个过滤器,现在它崩溃之前,它甚至显示在listview上的数据 public class PostDetailsAdapter extends BaseAdapter implements Filterable { private static List<PostDetails> PostsArray; List<PostDetails> mOriginalV
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;
}
}
公共类PostDetailsAdapter扩展BaseAdapter实现可过滤{
私有静态列表PostsArray;
列出mOriginalValues;
私人停车场;
公共PostDetailsAdapter(上下文、列表结果){
PostsArray=结果;
mInflater=LayoutInflater.from(上下文);
}
public int getCount(){
返回PostsArray.size();
}
公共对象getItem(int位置){
返回PostsArray.get(位置);
}
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视窗座;
if(convertView==null){
convertView=mInflater.充气(R.layout.post_行,空);
holder=新的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=(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(颜色为黑色);
支架.说明.setTextColor(颜色.黑色);
holder.Author.setTextColor(Color.BLACK);
返回视图;
}
静态类视窗夹{
文本视图标题;
文本查看日期;
文本视图描述;
文本视图作者;
}
@凌驾
公共过滤器getFilter()
{
过滤器过滤器=新过滤器()
{
@抑制警告(“未选中”)
@凌驾
受保护的void publishResults(CharSequence约束、FilterResults结果)
{
PostsArray=(列表)results.values;
notifyDataSetChanged();
}
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束)
{
FilterResults results=新的FilterResults();
List FilteredArrList=新建ArrayList();
if(mOriginalValues==null)
{
System.out.println(“”);
mOriginalValues=新阵列列表(PostsArray);
}
if(constraint==null | | constraint.length()==0)
{
//将原始结果设置为return
results.count=mOriginalValues.size();
结果.值=mOriginalValues;
}
其他的
{
constraint=constraint.toString().toLowerCase();
for(int i=0;i
原来代码没有问题,在完全设置列表视图之前,我试图将过滤器应用于此列表视图。不完全理解异步任务的乐趣:)