在我的应用中,我正在使用ExpandableListView
。我正在使用扩展BaseExpandableListAdapter
的适配器。我想刷新ExpandableListView
。
我的ExpandableListView
由带有删除按钮的项目组成,该按钮与数据库链接。
如果我按下删除按钮,该项将从db中永久删除。但是listview
并没有同时令人耳目一新。如果我再次运行该活动,那么它是令人耳目一新的但不是同时。
我正在使用
mAdapter.notifyDataSetChanged();
但它不能按我的意愿工作。 为什么呢?
答案 0 :(得分:8)
我刚刚在BaseExpandableListAdapter的以下重写方法上调用了super,从那时起notifyDataSetChanged()就可以了。
@Override
public void registerDataSetObserver(DataSetObserver observer) {
super.registerDataSetObserver(observer);
}
答案 1 :(得分:4)
您可以尝试在刷新时在ExpandableListView上另外调用invalidateViews()。
答案 2 :(得分:0)
您必须等到绘制整个viewtree,然后才能调用notifyDataSetChanged()
“视图树观察器用于注册可以通知视图树中全局变化的侦听器。这样的全局事件包括但不限于整个树的布局,绘图过程的开始,触摸模式更改.... ViewTreeObserver永远不应该由应用程序实例化,因为它是由视图层次结构提供的。有关更多信息,请参阅getViewTreeObserver()。“
http://developer.android.com/reference/android/view/ViewTreeObserver.html
final View v = convertView;
ViewTreeObserver vto = convertView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
v.getViewTreeObserver().removeOnGlobalLayoutListener(this);
notifyDataSetChanged();
}});
答案 3 :(得分:0)
如果您使用Big Nerd Ranch的可扩展列表,请注意notifyDataSetChanged()
的传统RecyclerView.adapter
无效。
相反,Expandable RecyclerView提供了一组通知方法,能够通知适配器对ParentListItem列表的更改。
// Parent Changes
notifyParentItemInserted(int parentPosition)
notifyParentItemRemoved(int parentPosition)
notifyParentItemChanged(int parentPosition)
notifyParentItemRangeInserted(int parentPositionStart, int itemCount)
// Child Changes
notifyChildItemInserted(int parentPosition, int childPosition)
notifyChildItemRemoved(int parentPosition, int childPosition)
notifyChildItemChanged(int parentPosition, int childPosition)
有关其他细节,请访问https://bignerdranch.github.io/expandable-recycler-view/