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

RecyclerView onCreateViewHolder未调用求助:已设Adapter但该方法未触发

问题分析与解决方案

嘿,我帮你找到了onCreateViewHolder始终不执行的核心原因,还整理了几个需要调整的细节:

1. 最关键的问题:数据源为空

你的ChatAdapter里getItemCount()返回的是itemList.size(),但在MyActivity中初始化的messages是一个空的ArrayList(new ArrayList<ChatMessage>()),没有添加任何ChatMessage对象。这时候getItemCount()实际返回0,而非你描述的5。

RecyclerView的逻辑是:只有当getItemCount() > 0时,才会触发onCreateViewHolder和onBindViewHolder的调用——毕竟没有要显示的条目,自然不需要创建ViewHolder。

2. 次要问题:设置顺序不符合规范

虽然官方没有强制要求,但通常建议先给RecyclerView设置LayoutManager,再设置Adapter。你的代码里先调用了setAdapter,之后才setLayoutManager,虽然这不一定直接导致当前问题,但调整顺序更符合RecyclerView的工作逻辑。


修复步骤

第一步:给数据源添加实际数据

在设置Adapter之前,给messages列表填充5个ChatMessage对象,确保getItemCount()能返回5:

List<ChatMessage> messages = new ArrayList<ChatMessage>();
// 添加测试数据,根据你的ChatMessage构造方法调整参数
for (int i = 0; i < 5; i++) {
    messages.add(new ChatMessage("测试消息" + i, "10:0" + i, "已发送"));
}

第二步:调整RecyclerView的设置顺序

先设置LayoutManager,再绑定Adapter:

LinearLayoutManager layoutManager = new LinearLayoutManager(this);
reyclerview_message_list.setLayoutManager(layoutManager);

// 先设置LayoutManager,再设置Adapter
reyclerview_message_list.setAdapter(new ChatAdapter(messages, R.layout.chat_send));
reyclerview_message_list.setItemAnimator(new DefaultItemAnimator());
reyclerview_message_list.addItemDecoration(new DividerItemDecoration(getApplicationContext(), layoutManager.getOrientation()));

额外检查项

确认R.layout.chat_send布局文件中,确实包含R.id.text_message_body、R.id.text_message_time、R.id.text_message_state这三个TextView控件——虽然这不是onCreateViewHolder不执行的原因,但避免后续绑定数据时出现空指针异常。

内容的提问来源于stack exchange,提问作者나상혁

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:54:21