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

RecyclerView的CardView中ListView仅显示单条数据的问题求助

问题分析与解决方案

嘿,我帮你找到了问题的根源,咱们一步步来解决:

核心问题

你现在遇到的两个关键问题:

  1. 共用评论集合:你在VideoAdapter里定义的ArrayList<String> arrayList是Adapter的成员变量,所有RecyclerView的CardView Item都会共享这个集合。不管你在哪个Item里输入评论,都会加到同一个列表里,再加上RecyclerView的ViewHolder复用机制,就会导致数据混乱,看起来只显示最后一条。
  2. ListView高度异常:XML里给ListView设置了android:layout_height="fill_parent",在CardView的垂直LinearLayout里,这个设置会让ListView高度撑满剩余空间,但CardView本身是wrap_content,最终会导致ListView只显示一行内容,进一步加重了"只显示最后一条"的错觉。

分步解决方案

1. 给每个Video对象绑定独立的评论集合

首先修改你的Video模型类,给每个视频添加自己的评论列表,这样每个CardView的评论数据就不会互相干扰:

public class Video {
    // 你已有的字段:titolo, sottotitolo, data, pic等
    private ArrayList<String> comments = new ArrayList<>();

    // 添加评论的方法
    public void addComment(String comment) {
        comments.add(comment);
    }

    // 获取评论列表的方法
    public ArrayList<String> getComments() {
        return comments;
    }
}

2. 优化按钮点击事件逻辑

把之前共用arrayList的逻辑,改成操作当前Video对象的独立评论集合,同时避免重复创建Adapter:

holder.button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String commento = holder.tw.getText().toString().trim();
        // 先判断输入是否为空
        if (!commento.isEmpty()) {
            // 获取当前Item对应的Video对象
            Video currentVideo = mData.get(position);
            // 添加评论到当前Video的独立集合
            currentVideo.addComment(commento);
            
            // 复用已有Adapter,避免重复创建
            ArrayAdapter<String> commentAdapter = (ArrayAdapter<String>) holder.lw.getAdapter();
            if (commentAdapter == null) {
                commentAdapter = new ArrayAdapter<>(context, 
                    android.R.layout.simple_list_item_1, currentVideo.getComments());
                holder.lw.setAdapter(commentAdapter);
            } else {
                // 直接通知Adapter数据变化
                commentAdapter.notifyDataSetChanged();
            }
            
            // 清空输入框提升体验
            holder.tw.setText("");
        }
    }
});

3. 修复ListView高度问题

修改XML里的ListView布局,避免高度设置不合理导致的显示异常:

<ListView
    android:id="@+id/mobile_list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:maxHeight="200dp" /> <!-- 设置最大高度,防止撑满整个CardView -->

如果想要更完美的嵌套体验,建议把ListView换成RecyclerView,它在嵌套布局里的高度计算更稳定,复用机制也更适配RecyclerView的Item场景。

4. 处理ViewHolder复用逻辑

在onBindViewHolder里,每次绑定Item时要同步更新评论列表的显示,防止复用旧ViewHolder时数据错乱:

@Override
public void onBindViewHolder(final VideoHolder holder, final int position) {
    final Video video = mData.get(position);
    // ... 其他已有绑定逻辑(标题、图片等)
    
    // 同步评论列表显示
    ArrayAdapter<String> commentAdapter = (ArrayAdapter<String>) holder.lw.getAdapter();
    if (commentAdapter == null) {
        commentAdapter = new ArrayAdapter<>(context, android.R.layout.simple_list_item_1, video.getComments());
        holder.lw.setAdapter(commentAdapter);
    } else {
        commentAdapter.notifyDataSetChanged();
    }
    
    // ... 其他点击事件逻辑
}

这样修改后,每个CardView都会维护自己的评论列表,点击按钮添加的评论只会显示在当前Item的ListView里,而且所有输入的内容都能正常展示啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:25:49