ListView项目重叠。

3

删除项目后,listView 重叠了。为什么?例如,在删除第一个项目之前和之后:

enter image description here

我正在使用以下方法删除元素:

public void updateData(List<ParseObject> data) {
    mGroupList.clear();
    mGroupList.addAll(data);
    notifyDataSetChanged();
}

列表视图:

<ListView
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:divider="@null"/>

在适配器中的getView:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder;

    if (convertView == null) {
        viewHolder = new ViewHolder();
        convertView = mLayoutInflater.inflate(R.layout.card_item, parent, false);
        viewHolder.mCardViewNative = (CardViewNative) convertView.findViewById(R.id.card_view);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    } 

    //code

    viewHolder.mCardViewNative.setCard(card);

    return convertView;
}

card_item.xml:

<it.gmariotti.cardslib.library.view.CardViewNative
android:background="@drawable/header_dark"
android:id="@+id/card_view"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

更新

如果不使用ViewHolder并且每次都充气视图,就不会有重叠。但是每次充气视图并不好。

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    convertView = mLayoutInflater.inflate(R.layout.card_item, parent, false);
    CardViewNative cardViewNative = (CardViewNative) convertView.findViewById(R.id.card_view);

    //code

    cardViewNative.setCard(card);

    return convertView;
}

你能分享一下你的代码吗? - Meenal
你在删除和添加操作之后是否调用了notifyDataSetChanged()方法? - Manikanta Ottiprolu
@MeenalSharma 我的Github代码 - Max
@Manikanta,是的,在适配器中编写代码: mGroupList.clear(); mGroupList.addAll(data); notifyDataSetChanged(); - Max
尝试使用以下代码替换:final ParseObject group = mGroupList.get(position); 而不是 final ParseObject group = getGroup(position); - Meenal
显示剩余3条评论
1个回答

0

尝试

convertView = mLayoutInflater.inflate(R.layout.card_item, null);

不是

convertView = mLayoutInflater.inflate(R.layout.card_item, parent, false);

对我来说有效,使用ViewHolder作为静态类


1
我将ViewHolder设置为静态的。但是不幸的是,它对我没有起作用。 - Max
对我也不起作用。在我的情况下,即使在第一次加载时也会显示重叠的几个项目。 - Akhilesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接