notifyDataSetChanged后未调用android getChildView

notifyDataSetChanged后未调用android getChildView,android,adapter,expandablelistview,notifydatasetchanged,Android,Adapter,Expandablelistview,Notifydatasetchanged,我有一个expandableListView,并试图像这样更改它的子视图: ((SubItem) adapter.getChild(i+1, 5)).setCount(unreadBox); adapter.notifyDataSetChanged(); 以下是我的适配器类: public class DrawerAdapter extends BaseExpandableListAdapter { private Context context; private List<Item

我有一个expandableListView,并试图像这样更改它的子视图:

((SubItem) adapter.getChild(i+1, 5)).setCount(unreadBox);
 adapter.notifyDataSetChanged();
以下是我的适配器类:

public class DrawerAdapter extends BaseExpandableListAdapter {

private Context context;
private List<Item> items;
private List<List<SubItem>> subItems;

public DrawerAdapter(Context context, List<Item> items, List<List<SubItem>> subItems) {
    this.context = context;
    this.items = items;
    this.subItems = subItems;
}

@Override
public int getGroupCount() {
    return items.size();
}

@Override
public int getChildrenCount(int groupPosition) {
    return subItems.get(groupPosition).size();
}

@Override
public Object getGroup(int position) {
    return items.get(position);
}

@Override
public Object getChild(int groupPosition, int childPosition) {
    return subItems.get(groupPosition).get(childPosition);
}

@Override
public long getGroupId(int position) {
    return position;
}

@Override
public long getChildId(int groupPosition, int childPosition) {
    return childPosition;
}

@Override
public boolean hasStableIds() {
    return false;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded, View view, ViewGroup viewGroup) {

    Item item = (Item) getGroup(groupPosition);

    if (view == null) {
        LayoutInflater layoutInflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = layoutInflater.inflate(R.layout.list_drawer_group, null);
    }

    ImageView iconView = (ImageView) view.findViewById(R.id.icon_view);
    if (item.iconDrawableId != null) {
        iconView.setImageResource(item.iconDrawableId);
        iconView.setVisibility(View.VISIBLE);
    } else {
        iconView.setVisibility(View.GONE);
    }

    TextView groupHeader = (TextView) view.findViewById(R.id.group_header);
    groupHeader.setText(item.title);
    if (item.iconDrawableId != null) {
        groupHeader.setPadding(
            DimensionHelper.dpToPixels(context, 4.0f), 0,
            DimensionHelper.dpToPixels(context, 16.0f), 0);
    } else {
        groupHeader.setPadding(
            DimensionHelper.dpToPixels(context, 16.0f), 0,
            DimensionHelper.dpToPixels(context, 16.0f), 0);
    }

    ImageView imageView = (ImageView) view.findViewById(R.id.image_view);
    imageView.setImageResource(isExpanded ? R.drawable.ic_navigation_collapse : R.drawable.ic_navigation_expand);
    imageView.setVisibility(getChildrenCount(groupPosition) > 0 ? View.VISIBLE : View.GONE);

    return view;
}

@Override
public View getChildView(int groupPosition, int childPosition, boolean isExpanded, View view, ViewGroup viewGroup) {

    SubItem subItem = (SubItem) getChild(groupPosition, childPosition);

    if (view == null) {
        LayoutInflater layoutInflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = layoutInflater.inflate(R.layout.list_drawer_item, null);
    }

    TextView colorPreView = (TextView) view.findViewById(R.id.colorPreView);
    if (subItem.getColor() != -1) {
        colorPreView.setBackgroundColor(subItem.getColor());
        colorPreView.setVisibility(View.VISIBLE);
    } else {
        colorPreView.setVisibility(View.GONE);
    }

    ImageView iconView = (ImageView) view.findViewById(R.id.icon_view);
    if (subItem.iconDrawableId != null) {
        iconView.setImageResource(subItem.iconDrawableId);
        iconView.setVisibility(View.VISIBLE);
    } else {
        iconView.setVisibility(View.GONE);
    }

    TextView title = (TextView) view.findViewById(R.id.title_text_view);
    title.setText(subItem.title);

    if (subItem.iconDrawableId != null) {
        title.setPadding(
                DimensionHelper.dpToPixels(context, 4.0f), 0,
                DimensionHelper.dpToPixels(context, 16.0f), 0);
    } else {
        title.setPadding(
                DimensionHelper.dpToPixels(context, 40.0f), 0,
                DimensionHelper.dpToPixels(context, 16.0f), 0);
    }

    TextView counter = (TextView) view.findViewById(R.id.counter_text_view);
    counter.setText(String.valueOf(subItem.count));
    counter.setVisibility(subItem.count > 0 ? View.VISIBLE : View.GONE);

    return view;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    return true;
}

public static class Item {

    protected String   title;
    protected Integer  iconDrawableId;
    protected Listener listener;

    public Item(String title, Integer iconDrawableId, Listener listener) {
        this.title = title;
        this.iconDrawableId = iconDrawableId;
        this.listener = listener;
    }

    public Listener getListener() {
        return listener;
    }

    public static interface Listener {
        public void onClick(FragmentManager fragmentManager);
    }
}

public static class SubItem extends Item {

    protected long count;
    protected int color;

    public SubItem(String title, Integer iconDrawableId, long count, int color, Listener listener) {
        super(title, iconDrawableId, listener);
        this.count = count;
        this.color = color;
    }

    public long getCount() {
        return count;
    }

    public void setCount(long count) {
        this.count = count;
    }

    public int getColor() {
        return color;
    }

    public void setColor(int color) {
        this.color = color;
    }
}
}
public类DrawerAdapter扩展了BaseExpandableListAdapter{
私人语境;
私人清单项目;
私人清单分项;
公共抽屉标识符(上下文、列表项、列表子项){
this.context=上下文;
这个项目=项目;
this.subItems=子项;
}
@凌驾
public int getGroupCount(){
返回items.size();
}
@凌驾
公共整数getChildrenCount(整数组位置){
返回子项.get(groupPosition).size();
}
@凌驾
公共对象getGroup(int位置){
返回项目。获取(位置);
}
@凌驾
公共对象getChild(int-groupPosition,int-childPosition){
返回子项.get(groupPosition).get(childPosition);
}
@凌驾
公共长getGroupId(int位置){
返回位置;
}
@凌驾
公共长getChildId(int-groupPosition,int-childPosition){
返回子位置;
}
@凌驾
公共布尔表ID(){
返回false;
}
@凌驾
公共视图getGroupView(int groupPosition、布尔值isExpanded、视图视图、视图组ViewGroup){
Item Item=(Item)getGroup(groupPosition);
如果(视图==null){
LayoutInflater LayoutInflater=(LayoutInflater)上下文
.getSystemService(上下文布局\充气机\服务);
视图=布局更平坦。充气(R.layout.list\u drawer\u group,空);
}
ImageView图标视图=(ImageView)视图.findViewById(R.id.icon\u视图);
如果(item.icondrawbleid!=null){
iconView.setImageResource(item.iconDrawableId);
iconView.setVisibility(View.VISIBLE);
}否则{
iconView.setVisibility(View.GONE);
}
TextView组头=(TextView)view.findViewById(R.id.group\u头);
groupHeader.setText(item.title);
如果(item.icondrawbleid!=null){
groupHeader.setPadding(
DimensionHelper.dpToPixels(上下文,4.0f),0,
DimensionHelper.dpToPixels(上下文,16.0f),0);
}否则{
groupHeader.setPadding(
DimensionHelper.dpToPixels(上下文,16.0f),0,
DimensionHelper.dpToPixels(上下文,16.0f),0);
}
ImageView=(ImageView)view.findViewById(R.id.image\u视图);
setImageResource(isExpanded?R.drawable.ic_navigation_collapse:R.drawable.ic_navigation_expand);
imageView.setVisibility(getChildrenCount(groupPosition)>0?View.VISIBLE:View.GONE);
返回视图;
}
@凌驾
公共视图getChildView(int-groupPosition、int-childPosition、布尔isExpanded、视图视图、视图组视图组){
子项子项=(子项)getChild(groupPosition,childPosition);
如果(视图==null){
LayoutInflater LayoutInflater=(LayoutInflater)上下文
.getSystemService(上下文布局\充气机\服务);
视图=布局更平坦。充气(R.layout.list\u drawer\u item,空);
}
TextView colorPreView=(TextView)view.findViewById(R.id.colorPreView);
if(子项.getColor()!=-1){
colorPreView.setBackgroundColor(子项.getColor());
colorPreView.setVisibility(View.VISIBLE);
}否则{
colorPreView.setVisibility(View.GONE);
}
ImageView图标视图=(ImageView)视图.findViewById(R.id.icon\u视图);
if(subItem.iconDrawableId!=null){
iconView.setImageResource(子项iconDrawableId);
iconView.setVisibility(View.VISIBLE);
}否则{
iconView.setVisibility(View.GONE);
}
TextView title=(TextView)view.findViewById(R.id.title\u text\u view);
title.setText(子项.title);
if(subItem.iconDrawableId!=null){
title.setPadding(
DimensionHelper.dpToPixels(上下文,4.0f),0,
DimensionHelper.dpToPixels(上下文,16.0f),0);
}否则{
title.setPadding(
DimensionHelper.dpToPixels(上下文,40.0f),0,
DimensionHelper.dpToPixels(上下文,16.0f),0);
}
TextView计数器=(TextView)view.findViewById(R.id.counter\u text\u视图);
counter.setText(String.valueOf(subItem.count));
counter.setVisibility(subItem.count>0?View.VISIBLE:View.GONE);
返回视图;
}
@凌驾
公共布尔值isChildSelectable(int-groupPosition,int-childPosition){
返回true;
}
公共静态类项{
受保护的字符串标题;
受保护的整数ICondrawbleId;
受保护的侦听器;
公共项(字符串标题、整数ICondrawbleId、侦听器){
this.title=标题;
this.icondrawbleid=icondrawbleid;
this.listener=listener;
}
公共侦听器getListener(){
返回侦听器;
}
公共静态接口侦听器{
公共void onClick(FragmentManager FragmentManager);
}
}
公共静态类子项扩展项{
保护长计数;
保护色;
公共子项(字符串标题、整型ICondrawbleId、长计数、整型颜色、侦听器){
超级(标题、图标、监听器);
this.count=计数;
这个颜色=颜色;
}
公共长getCount(){
返回计数;
}
公共无效集合计数(长计数){
this.count=计数;
}
public int getColor(){
返回颜色;
}
公共void setColor(int-color){
这个颜色=颜色;
}
}
}

notifyDataSetChanged()方法工作不正常,有时调用getChildView,有时不调用,请帮助解决此问题。

您正在将值更改为子项,但未在适配器内部设置

SubItem item = ((SubItem) adapter.getChild(i+1, 5)).setCount(unreadBox);
adapter.setChild(i+1,5,item);
adapter.notifyDataSetChanged();
将此添加到适配器中

@Override
public void setChild(int groupPosition, int childPosition,SubItem item) {
    subItems.get(groupPosition).get(childPosition) = item;
}

它可能会帮助你!解决方法之一是折叠并展开用户看不到的可扩展列表视图项。他们中的任何一个都帮不了我:(((你自己尝试过/做过任何调试吗?我们不是通灵师…你能发布完整的适配器代码吗?)你有可扩展列表视图吗