1

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

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

4

2 回答 2

2

从 CustomListAdapter 中删除一行:

在调用之后,从指定索引中移除 ArrayAdapter 中的项目notifyDatasetChanged。它将更新您的列表视图。

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用来描述如何实现你的目标的。

于 2013-08-17T18:00:06.743 回答
1

我有一个提示:在 else 子句中,您返回一个空视图

else{
    View v = new View(context);
    v.setLayoutParams(new AbsListView.LayoutParams(0, 0));
    return v;
}

但是,如果您的列表有分隔线,则空视图下方的分隔线将加倍。

不同的是:我认为您应该在 getView 调用之前处理所有空数据。我的意思是: - 在 getCount(){ 循环并从位置创建一个新地图,而不是空数据
循环并计算所有数据!= null; 返回计数;}

在 getView 函数中使用新地图。

希望这有帮助。

于 2013-08-17T17:46:10.817 回答