Expand a group line programmatically in an extensible list

I am using expandablelistview. In any case, can I expand the group of rows when I click the image inside? I know that in order for the image to respond to a click, I need to focus. Now, as soon as this image responds to a click (inside my adapter adapter custome), how can I programmatically expand / collapse this particular group to which it belongs?

thank

+5
source share
2 answers

In adapter

private OnItemSelectedListener onItemSelectedCallback;

public interface OnItemsSelectedListener {
    public void onImageSelected(int groupPos);
}

public YourAdapter(Context context) {
    try {
        this.onItemSelectedCallback = (OnItemSelectedListener ) context;
    }
    catch (ClassCastException e) {
        throw new ClassCastException(context.toString() + " must implement OnItemSelectedListener ");
    }
}

Add this to getView ()

ImageView imageView = new ImageView();
imageView.setTag(R.id.tagGroupPosition, groupPosition);
imageView.setOnClickListener(onClickListener);

Add this to OnClickListener

OnClickListener onClickListener = new OnClickListener() {
    @Override
    public void onClick(View v) {
        int groupPos = ((ImageView) v).getTagId(R.id.tagGroupPosition);
        onItemSelectedCallback.onImageSelected(groupPos);
    }
}

Then in action you must implement YourAdapter.OnItemsSelectedListener Override onImageSelected

@Override
public void onImageSelected(int groupPos){
    if(expandableList.isGroupExpanded(groupPos)){
        expandableList.collapseGroup(groupPos);
    }else{
        expandableList.expandGroup(groupPos);
    }
}
+11
source

The simplest way:

  • Pass the link to ExpandableListViewin the adapter constructor;
  • getGroupView OnClickListener listView.expandGroup(position);

:

public class YourAdapter extends BaseExpandableListAdapter {

private ExpandableListView listView;

public ReportsAdapter(ExpandableListView listView) {
    this.listView = listView;
}

//...

@Override
public View getGroupView(final int position, boolean isExpanded, View convertView, ViewGroup parent) {
    ParentViewHolder holder;

    if (convertView == null) {
        convertView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.your_item, parent, false);

        holder = new ParentViewHolder();

        //... holder logic


        holder.btnExpand = convertView.findViewById(R.id.btn_expand);

        convertView.setTag(holder);
    } else {
        holder = (ParentViewHolder) convertView.getTag();
    }

    //..holder logic

    holder.btnExpand.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            listView.expandGroup(position);
        }
    });

    return convertView;
}

onCreate() onCreateView()

ExpandableListView listView = (ExpandableListView) view.findViewById(R.id.expandable_list_view);
    mAdapter = new YourAdapter(listView);
    listView.setAdapter(mAdapter);
+2

All Articles