Android ArrayAdapter筛选器未更新大小,留下空单元格

Android ArrayAdapter筛选器未更新大小,留下空单元格,android,filtering,android-arrayadapter,notifydatasetchanged,Android,Filtering,Android Arrayadapter,Notifydatasetchanged,我正在构建一个活动,其中包含通过SearchView筛选的用户列表。我有自定义的过滤设置,一切都很好 在项目被过滤之后,由于某种原因,适配器仍然认为它有所有的项目要显示,所以我最终得到了空单元格 问题截图 更新列表的代码 private void updateView(数据){ if(customListAdapter==null){ customListAdapter=新ProfilesListViewAdapter(此,R.layout.view\u profile\u list\u单元格

我正在构建一个活动,其中包含通过SearchView筛选的用户列表。我有自定义的过滤设置,一切都很好

在项目被过滤之后,由于某种原因,适配器仍然认为它有所有的项目要显示,所以我最终得到了空单元格

问题截图

更新列表的代码
private void updateView(数据){
if(customListAdapter==null){
customListAdapter=新ProfilesListViewAdapter(此,R.layout.view\u profile\u list\u单元格,数据);
setAdapter(customListAdapter);
//启用对给定ListView内容的筛选
usersListView.setTextFilterEnabled(true);
}
customListAdapter.setData(数据);
}
ArrayAdapter的代码
public ProfilesListViewAdapter(上下文mContext、int-layoutResourceId、ArrayList数据){
super(mContext、layoutResourceId、data);
this.layoutResourceId=layoutResourceId;
this.mContext=mContext;
这个数据=数据;
this.filteredData=数据;
}
公共void setData(ArrayList数据){
this.data.clear();
this.data.addAll(数据);
this.filteredData.clear();
this.filteredData.addAll(数据);
this.notifyDataSetChanged();
}
注:
数据
用于保留所有原始信息
filteredData
是在
getView
方法中用于填充单元格的数据

ArrayAdapter过滤代码
@覆盖
公共过滤器getFilter(){
返回新筛选器(){
@抑制警告(“未选中”)
@凌驾
受保护的void publishResults(CharSequence约束,Filter.FilterResults结果){
filteredData=(ArrayList)results.values;
ProfilesListViewAdapter.this.notifyDataSetChanged();
}
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
ArrayList filteredResults=getFilteredResults(约束);
FilterResults results=新的FilterResults();
results.values=filteredResults;
返回结果;
}
};
}
公共ArrayList getFilteredResults(CharSequence约束){
ArrayList结果=新建ArrayList();
用于(ProfileCellItem:data){
if(cellItem.getName().contains)(约束)||
cellItem.getName().toLowerCase().contains(约束)||
cellItem.getSubtitle()包含(约束)||
cellItem.getSubtitle().toLowerCase().contains(约束)){
结果:添加(单元格项);
}
}
返回结果;
}

您可能正在发送数据数组列表,其中有那么多行,而有些行是空的。调用
updateView(data)
时,从何处获取数据数组列表。还有ArrayList的什么?ArrayList?你可以发布更多关于如何创建arraylist的代码吗?列表末尾的适配器单元格是否总是空的?应用筛选器后,对大于$filteredSet的位置值调用“destroyItem()”。size…
数据中没有任何空行。它是一个
ArrayList
类型为
ProfileCellItem
的自定义对象,在我提供的代码中很清楚。一、 此外,请验证
filteredData
是否只包含它需要的内容@图登