Android删除自定义数组适配器中的listview行

时间:2013-08-17 16:53:33

标签: android listview baseadapter

我有一个列表视图,用于显示详细数据。我将我的数据存储在字符串的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;
    }

我的问题是,虽然数据没有显示,但我的列表视图中仍然有一个空行。我的问题是如何删除该行?任何帮助将不胜感激。谢谢你提前。

2 个答案:

答案 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函数中使用新映射。

希望得到这个帮助。