[英]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`由于底层数据的更改而重建其所有项目。
因此,基本上,您通常要做的是:
getCount()
, getView()
等等。 当稍后更改底层数据时(例如,通过“删除”按钮),您从适配器中的数据中删除了该项目,但是直到您通过调用将更改的数据通知给ListView为止,listview才知道它通知notifyDataSetChangedd()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.