0

我正在使用这个库来实现 ExpandableRecyclerView。组视图如下所示:

<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>

用于展开/折叠的单击事件由库处理,我通过适配器中的方法将元素添加到列表中。库的编码方式,有添加和删除项目的特定通知方法:

请注意,RecyclerView.Adapter 的传统 notifyDataSetChanged() 无法按预期工作。而 Expandable RecyclerView 提供了一组通知方法,能够通知适配器 ParentListItems 列表的更改。

notifyParentItemInserted(int parentPosition), notifyParentItemRemoved(int parentPosition), notifyParentItemChanged(int parentPosition), notifyParentItemRangeInserted(int parentPositionStart, int itemCount)

我想使用 ImageButton 来处理从列表中删除给定组的操作。为此,我必须访问 Adapter 方法 notifyParentItemRemoved。我是否应该为组处理 ViewHolder 中的单击,如下所示:

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(...) {
    ...
}

如果是这样,我将如何

  1. 访问我要删除的列表项?ArrayList 在 Adapter 类中。
  2. 导致列表更新?它需要调用适配器通知方法。

我应该在 ViewHolder 中引用适配器吗?以这种方式处理它感觉不对。如果没有,那么如何从可扩展组视图中处理单击事件?

4

1 回答 1

0

由于没有回应,我不得不尝试自己解决问题。我不知道这是否是最好的方法(可能不是),但似乎没有其他选择。

从适配器中,我将对适配器对象的引用传递给 ViewHolder 构造函数。单击是在 ViewHolder 本身内处理的。调用适配器方法,进而调用通知方法。这工作正常。

于 2016-05-28T03:30:17.093 回答