I have a expandableListView and tried to change its childs like that:
((SubItem) adapter.getChild(i+1, 5)).setCount(unreadBox);
adapter.notifyDataSetChanged();
Here is my adapter class:
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;
}
}
}
notifyDataSetChanged() method is not working properly, sometimes getChildView is being called sometimes not,please help in order to fix this issue.
You are changing value to child Item however not setting back inside of Adapter.
SubItem item = ((SubItem) adapter.getChild(i+1, 5)).setCount(unreadBox);
adapter.setChild(i+1,5,item);
adapter.notifyDataSetChanged();
add this in Adapter
@Override
public void setChild(int groupPosition, int childPosition,SubItem item) {
subItems.get(groupPosition).get(childPosition) = item;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With