You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用thoughtbot Expandable RecyclerView无法展开分组求助

解决Expandable RecyclerView分组无法展开及子项未绑定的问题

我帮你排查了代码里的几个关键问题,这应该能解决你的点击无反应和子项不绑定的问题:

1. 修复YoutubePlaylist类的父类数据同步问题

你继承了ExpandableGroup<YoutubeVideo>,但自定义的videos字段和父类的items成员变量没有同步。适配器在调用group.getItems()时拿到的是父类的空列表,导致子项无法获取数据,同时分组展开也没有内容可显示。

修改YoutubePlaylist类,确保父类的items和自定义的videos保持同步:

public class YoutubePlaylist extends ExpandableGroup<YoutubeVideo> {
    @SerializedName("ListTitle")
    private String title;
    @SerializedName("ListItems")
    private ArrayList<YoutubeVideo> videos;

    // 新增无参构造,供Gson解析使用
    public YoutubePlaylist() {
        super("", new ArrayList<>());
    }

    public YoutubePlaylist(String title, List<YoutubeVideo> items) {
        super(title, items);
        this.title = title;
        this.videos = new ArrayList<>(items);
    }

    public String getListTitle() {
        return title;
    }

    public void setListTitle(String listTitle) {
        this.title = listTitle;
        setTitle(listTitle); // 同步更新父类的title
    }

    public ArrayList<YoutubeVideo> getVideos() {
        return videos;
    }

    public void setVideos(ArrayList<YoutubeVideo> videos) {
        this.videos = videos;
        this.items = videos; // 同步到父类的items,让group.getItems()能拿到数据
    }

    @Override
    public String toString() {
        return "YoutubePlaylist{" +
                "title='" + title + '\'' +
                ", videos=" + videos +
                '}';
    }
}

2. 给PlaylistViewHolder添加点击触发展开/折叠的逻辑

这个库不会自动处理分组的点击事件,需要你手动在GroupViewHolder中设置点击监听,调用库提供的toggleExpansion()方法来切换展开状态,同时更新箭头图标:

public class PlaylistViewHolder extends GroupViewHolder {
    private TextView mPlaylistName, mPlaylistCount;
    private ImageView arrow;

    public PlaylistViewHolder(View itemView) {
        super(itemView);
        mPlaylistName = itemView.findViewById(R.id.playlistNameView);
        mPlaylistCount = itemView.findViewById(R.id.videosCount);
        arrow = itemView.findViewById(R.id.expandBtn);

        // 设置分组项的点击监听,触发展开/折叠
        itemView.setOnClickListener(v -> {
            toggleExpansion(); // 调用库的方法切换状态
            // 根据展开状态旋转箭头图标
            arrow.setRotation(isExpanded() ? 180f : 0f);
        });
    }

    public void setCurrentPlaylist(YoutubePlaylist playlist){
        Log.e("###",playlist.toString());
        mPlaylistName.setText(playlist.getListTitle());
        // 显示实际的子项数量,替换固定的"5"
        mPlaylistCount.setText(String.valueOf(playlist.getItems().size()));
        // 初始化箭头的状态
        arrow.setRotation(isExpanded() ? 180f : 0f);
    }
}

3. 验证数据解析的正确性

在MainActivity的onResponse方法中,你可以打印group.getItems().size()来确认父类的items是否已经正确加载了子项数据,确保Gson解析后每个YoutubePlaylist的子项列表都不为空。

做完这些修改后,点击分组应该就能正常展开/折叠,同时子项也会被正确绑定(子项的绑定只会在分组展开时触发,这是库的默认优化行为,避免不必要的视图创建)。

内容的提问来源于stack exchange,提问作者holyubuntu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:45:05