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

RecyclerView数据传递成功但无法渲染问题求助

RecyclerView数据传递正常但无法渲染的问题排查

开发RecyclerView功能时,现有两个Activity:Activity A包含RecyclerView,Activity B包含两个EditText组件。给Activity B中的按钮设置OnClickListener,将EditText输入数据存入MainData对象并添加至ArrayList,传递给Activity A的Adapter。数据传递正常,但RecyclerView无法渲染加载,以下是相关代码及问题排查:


包含RecyclerView的Activity A代码

recyclerView = (RecyclerView) findViewById(R.id.rv);

linearLayoutManager = new LinearLayoutManager(this);

recyclerView.setLayoutManager(linearLayoutManager);


ArrayList<MainData> list = (ArrayList<MainData>) getIntent().getSerializableExtra("list");

adapter = new MainAdapter(list);

recyclerView.setAdapter(adapter);

adapter.notifyDataSetChanged();

包含EditText的Activity B代码

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        LinearLayout itemView = (LinearLayout) findViewById(R.id.rv);
        Intent intent = new Intent(upload.this, MainActivity.class);

        ArrayList<MainData> list = new ArrayList<MainData>();

        EditText edit = (EditText) findViewById(R.id.edittext_name);

        EditText edit_main = (EditText) findViewById(R.id.edittext_main);

        list.add(new MainData(edit.getText().toString(), edit_main.getText().toString()));

        intent.putExtra("list",list);

        startActivity(intent);
    }
});

MainData代码

public MainData(String tv_name, String tv_content) {
    this.tv_name = tv_name;
    this.tv_content = tv_content;
}

Adapter代码

private ArrayList<MainData> list;

public MainAdapter(ArrayList<MainData> list) {
    this.list = list;
}

@NonNull
@Override
public MainAdapter.CustomViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list, parent, false);

    CustomViewHolder holder = new CustomViewHolder(view);

    return holder;
}

@Override
public void onBindViewHolder(@NonNull MainAdapter.CustomViewHolder holder, int position) {

    holder.tv_name.setText(list.get(position).getTv_name());
    holder.tv_content.setText(list.get(position).getTv_content());

    holder.itemView.setTag(position);

        @Override
public int getItemCount() {
    return (null != list ? list.size() : 0);
}

RecyclerView布局XML文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
 xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  tools:context=".MainActivity">

   <androidx.recyclerview.widget.RecyclerView
     android:id="@+id/rv"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:scrollbarFadeDuration="0"
   android:scrollbarSize="5dp"
   android:scrollbarThumbVertical="@color/black"
   android:scrollbars="vertical"
   android:layout_weight="1"/>


<Button
    android:id="@+id/btn"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="8"
    android:text="move"
    android:textSize="30sp"/>
</LinearLayout>

问题原因及修复方案

1. Adapter语法错误(核心问题)

Adapter代码中getItemCount()被错误嵌套在onBindViewHolder()方法内部,导致RecyclerView无法正确获取列表条目数;同时缺少CustomViewHolder定义,无法绑定列表项控件。

修复后的Adapter代码:

private ArrayList<MainData> list;

public MainAdapter(ArrayList<MainData> list) {
    this.list = list;
}

@NonNull
@Override
public MainAdapter.CustomViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list, parent, false);
    return new CustomViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull MainAdapter.CustomViewHolder holder, int position) {
    holder.tv_name.setText(list.get(position).getTv_name());
    holder.tv_content.setText(list.get(position).getTv_content());
    holder.itemView.setTag(position);
}

@Override
public int getItemCount() {
    return list != null ? list.size() : 0;
}

// 补充CustomViewHolder定义,需与item_list布局控件ID对应
public static class CustomViewHolder extends RecyclerView.ViewHolder {
    TextView tv_name;
    TextView tv_content;

    public CustomViewHolder(@NonNull View itemView) {
        super(itemView);
        tv_name = itemView.findViewById(R.id.tv_name); // 替换为item_list布局实际ID
        tv_content = itemView.findViewById(R.id.tv_content); // 替换为item_list布局实际ID
    }
}

2. MainData未实现Serializable接口

通过getSerializableExtra()传递ArrayList时,泛型类MainData必须实现Serializable接口,否则会导致数据传递异常。

修复后的MainData代码:

import java.io.Serializable;

public class MainData implements Serializable {
    private String tv_name;
    private String tv_content;

    public MainData(String tv_name, String tv_content) {
        this.tv_name = tv_name;
        this.tv_content = tv_content;
    }

    // 补充getter方法,供Adapter获取数据
    public String getTv_name() {
        return tv_name;
    }

    public String getTv_content() {
        return tv_content;
    }
}

3. Activity B中的无用错误代码

Activity B中LinearLayout itemView = (LinearLayout) findViewById(R.id.rv);无意义,且布局中不存在该控件,会引发空指针异常,直接删除即可。

4. RecyclerView布局权重设置错误

垂直方向LinearLayout中使用layout_weight时,需将控件layout_height设为0dp,否则权重不生效,RecyclerView会被Button挤压至不可见。

修复后的RecyclerView布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
 xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  tools:context=".MainActivity">

   <androidx.recyclerview.widget.RecyclerView
     android:id="@+id/rv"
     android:layout_width="match_parent"
     android:layout_height="0dp"
     android:scrollbarFadeDuration="0"
     android:scrollbarSize="5dp"
     android:scrollbarThumbVertical="@color/black"
     android:scrollbars="vertical"
     android:layout_weight="1"/>

<Button
    android:id="@+id/btn"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="8"
    android:text="move"
    android:textSize="30sp"/>
</LinearLayout>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:35:25