我有一个列表视图,用于显示详细数据。我将我的数据存储在字符串的ArrayList中。但是,某些字段可能没有要显示的数据,但我需要保持数组长度相同以匹配静态标题数组。我可以在我的自定义基本适配器中捕获getView方法中的空数据:
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.drug_detail_cell, parent, false);
}
// check array bounds
if (position < getCount()) {
// check for null items
String item = items.get(position);
if (item != null) {
// get the text views
TextView title = (TextView) convertView.findViewById(R.id.item_title);
TextView sub = (TextView) convertView.findViewById(R.id.item_subtitle);
title.setText(titles.get(position));
sub.setText(item.toString());
} else {
// delete row
}
}
return convertView;
}
我的问题是,虽然数据没有显示,但我的列表视图中仍然有一个空行。我的问题是如何删除该行?任何帮助将不胜感激。谢谢你提前。
答案 0 :(得分:2)
从CustomListAdapter中删除行:
在调用notifyDatasetChanged
之后,从指定的索引中删除ArrayAdapter中的项目。它会更新你的listView。
在CustomAdapterClass
:
@Override
public void remove(String object) {
super.remove(object);
// your other code
}
在ListActivity
课程中:
CustomAdapterClass adap = new CustomAdapterClass();
adap.remove("hello world");
adap.notifyDatasetChanged(); // this will update your listView
我的代码是bare bone example
来描述如何实现目标。
答案 1 :(得分:1)
我有一个提示:在else子句中你返回一个空视图
else{
View v = new View(context);
v.setLayoutParams(new AbsListView.LayoutParams(0, 0));
return v;
}
但是如果你的列表有分隔符,那么空视图下面的分隔符将是双倍的。
另外一个:我认为你应该在getView调用之前处理所有空数据。我的意思是:
- 在getCount(){
循环并从位置创建新地图而不是空数据
循环并计算所有数据!= null;返回计数;
}
在getView函数中使用新映射。
希望得到这个帮助。