notifyDataSetChanged 在自定义 BaseExpandableListAdapter 中不起作用
notifyDataSetChanged not working in custom BaseExpandableListAdapter
我的导航抽屉有一个 ExpandableListView
,我想在运行时更新它的内容。除 notifyDataSetChanged
外,一切都按预期工作。当我在自定义 ExpandableListAdapter
中调用 notifyDataSetChanged
时。我已经尝试了互联网上的所有解决方法,但似乎没有任何效果。
这是我的适配器
public class ExpandableListAdapter extends BaseExpandableListAdapter {
private Context mContext;
private List<String> mListGroup;
private HashMap<String, List<String>> mListChild;
public ExpandableListAdapter(Context mContext, List<String> mListGroup, HashMap<String, List<String>> mListChild) {
this.mContext = mContext;
this.mListGroup = mListGroup;
this.mListChild = mListChild;
}
@Override
public int getGroupCount() {
return mListGroup.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return mListChild.get(mListGroup.get(groupPosition)).size();
}
@Override
public Object getGroup(int groupPosition) {
return mListGroup.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return mListChild.get(mListGroup.get(groupPosition)).get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
ViewGroup parent) {
String groupTitle = (String) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.nav_list_group_main, null);
}
TextView title = convertView.findViewById(R.id.expandable_list_group_main);
title.setTypeface(null, Typeface.BOLD);
title.setText(groupTitle);
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
String childTitle = (String) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.nav_list_child_main, null);
}
TextView title = convertView.findViewById(R.id.expandable_list_child_main);
title.setText(childTitle);
return convertView;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
这是尝试更新数据的片段。
private void updatetNavigationMenu() {
List<String> group = Arrays.asList("a", "b", "c", "d");
List<String> child = Arrays.asList("1", "2", "3", "4");
expandableListChild.put(group.get(0), child);
expandableListChild.put(group.get(1), child);
expandableListChild.put(group.get(2), child);
expandableListChild.put(group.get(3), child);
expandableListGroup = new ArrayList<>(expandableListChild.keySet());
expandableListAdapter.notifyDataSetChanged();
}
调用 notifyDataSetChanged
后 mListGroup
和 mListChild
没有改变。我试过手动清除它们,但这也不起作用。
谢谢!
您的适配器中需要一个 setter 方法,例如
void setData(List<String> list, HashMap<String, List<String>> child) {
this.mListGroup = list;
this.mListChild = child;
notifyDataSetChanged();
}
在您的 updatetNavigationMenu
通话结束时
expandableListAdapter.setData( group, expandableListGroup) ;
notifyDataSetChanged
将告诉适配器刷新。
我的导航抽屉有一个 ExpandableListView
,我想在运行时更新它的内容。除 notifyDataSetChanged
外,一切都按预期工作。当我在自定义 ExpandableListAdapter
中调用 notifyDataSetChanged
时。我已经尝试了互联网上的所有解决方法,但似乎没有任何效果。
这是我的适配器
public class ExpandableListAdapter extends BaseExpandableListAdapter {
private Context mContext;
private List<String> mListGroup;
private HashMap<String, List<String>> mListChild;
public ExpandableListAdapter(Context mContext, List<String> mListGroup, HashMap<String, List<String>> mListChild) {
this.mContext = mContext;
this.mListGroup = mListGroup;
this.mListChild = mListChild;
}
@Override
public int getGroupCount() {
return mListGroup.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return mListChild.get(mListGroup.get(groupPosition)).size();
}
@Override
public Object getGroup(int groupPosition) {
return mListGroup.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return mListChild.get(mListGroup.get(groupPosition)).get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
ViewGroup parent) {
String groupTitle = (String) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.nav_list_group_main, null);
}
TextView title = convertView.findViewById(R.id.expandable_list_group_main);
title.setTypeface(null, Typeface.BOLD);
title.setText(groupTitle);
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
String childTitle = (String) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.nav_list_child_main, null);
}
TextView title = convertView.findViewById(R.id.expandable_list_child_main);
title.setText(childTitle);
return convertView;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
这是尝试更新数据的片段。
private void updatetNavigationMenu() {
List<String> group = Arrays.asList("a", "b", "c", "d");
List<String> child = Arrays.asList("1", "2", "3", "4");
expandableListChild.put(group.get(0), child);
expandableListChild.put(group.get(1), child);
expandableListChild.put(group.get(2), child);
expandableListChild.put(group.get(3), child);
expandableListGroup = new ArrayList<>(expandableListChild.keySet());
expandableListAdapter.notifyDataSetChanged();
}
调用 notifyDataSetChanged
后 mListGroup
和 mListChild
没有改变。我试过手动清除它们,但这也不起作用。
谢谢!
您的适配器中需要一个 setter 方法,例如
void setData(List<String> list, HashMap<String, List<String>> child) {
this.mListGroup = list;
this.mListChild = child;
notifyDataSetChanged();
}
在您的 updatetNavigationMenu
通话结束时
expandableListAdapter.setData( group, expandableListGroup) ;
notifyDataSetChanged
将告诉适配器刷新。