繁体   English   中英

如何在CustomAdapter上使用notifyDataSetChanged?

[英]How to use notifyDataSetChanged on CustomAdapter?

在我的Android应用程序中,我有一个ExpandableListView和BaseExpandableListAdapter,BaseExpandableListAdapter在单独的类中。 在列表中,我在列表的子行内有一个删除按钮,该按钮可删除当前行,但列表会像以前一样保持不变,并且不会实时显示。 我通过DbHandler将数据发送到适配器,并将其发送到HashMap中。 我尝试使用notifyDataSetChanged(),但没有其他结果,我再次运行onCreate。 我该如何解决?

假设您已使用两个ArrayLists初始化了ExpandableListView:第一个包含Groups,第二个包含Groups的子级。 它看起来像:

private ArrayList<E> mListGroups;
private ArrayList<ArrayList<E>> mGroupsItems;

下面是一个为子元素添加自定义布局的示例,其中仅包含一个TextView。

@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild,
                         View convertView, ViewGroup parent) {
    ItemViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.list_item_drawer, null);
        holder = new ItemViewHolder();
        holder.tv = (TextView)convertView.findViewById(R.id.text1);
        convertView.setTag(holder);
    } else holder = (ItemViewHolder)convertView.getTag();
    holder.tv.setText(getChild(groupPosition, childPosition).getName());
    holder.tv.setClickable(true);
    holder.tv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mGroupsItems.get(groupPosition).remove(childPosition);
            notifyDataSetChanged();
        }
    });
    return convertView;
}

为了删除单击的元素,您可以在该View上设置一个OnClickListener并从列表中删除该元素。 在实现中,您将在ImageView上设置OnClickListener。 而已。

啊,还有一件事。 上面的实现仅更新显示的列表。 该列表在您的活动中将保持不变。 因此,例如,如果旋转屏幕,则所有删除的项目将再次出现。 我还实现了一个接口,并将更新的列表从Adapter中的回调传递回我的Activity。

notifyDataSetChanged通知ListView`由于底层数据的更改而重建其所有项目。

因此,基本上,您通常要做的是:

  • 从布局查找ListView
  • 创建适配器实例
  • 连接ListView和适配器
  • 在适配器中设置一些数据
  • 调用notifyDataSetChanged()以通知ListView构建其项(通过调用适配器的getCount()getView()等等。

当稍后更改底层数据时(例如,通过“删除”按钮),您从适配器中的数据中删除了该项目,但是直到您通过调用将更改的数据通知给ListView为止,listview才知道它通知notifyDataSetChangedd()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM