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,提问作者나상혁

