I'm using this library to implement an ExpandableRecyclerView. The group view looks like this:
<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/expandable_list_group_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Group Heading" />
<ImageButton
android:id="@+id/expandable_list_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_delete_black_24dp"
android:layout_alignParentEnd="true" />
</RelativeLayout>
The click events for expanding/collapsing are handled by the library and I'm adding elements to the list through a method in the Adapter. The way the library is coded, there are specific notify methods for addition and removal of items:
Please note that the traditional notifyDataSetChanged() of RecyclerView.Adapter does not work as intended. Instead Expandable RecyclerView provides a set of notify methods with the ability to inform the adapter of changes to the list of ParentListItems.
notifyParentItemInserted(int parentPosition), notifyParentItemRemoved(int parentPosition), notifyParentItemChanged(int parentPosition), notifyParentItemRangeInserted(int parentPositionStart, int itemCount)
I want to use the ImageButton to handle the deletion of the given group from the list. To do so, I must access the Adapter method notifyParentItemRemoved. Should I handle the click within the ViewHolder for the group, like so:
public class MyParentViewHolder extends ParentViewHolder {
TextView groupTitle;
ImageButton deleteButton;
public MyParentViewHolder(View itemView) {
super(itemView);
groupTitle = (TextView) itemView.findViewById(R.id.expandable_list_group_title);
deleteButton = (ImageButton) itemView.findViewById(R.id.expandable_list_delete);
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
... // somehow delete
}
});
}
public void bind(...) {
...
}
If so, how would I
- Access the list items that I want to remove? The ArrayList is in the Adapter class.
- Cause the list to update? It requires calling the Adapter notify method.
Should I have a reference to the Adapter within the ViewHolder? It does not feel right to handle it in this manner. If not, then how can I handle the click event from within the expandable group view?