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

跨类/方法Intent数据传递问题:如何向InformationActivity传条码与列表

Android Intent传递条码字符串与列表到InformationActivity的解决方案

我来帮你解决这个Intent传递数据的问题,之前你尝试全局Intent没解决,大概率是传递/接收的方式不对,或者列表的处理没到位,下面分步骤给你讲正确的实现方式:


一、发送端(原Activity/Fragment)的正确写法

不管你是在Activity还是Fragment中,每次跳转都要创建新的Intent实例,不要复用全局Intent,避免数据混乱。

情况1:传递的是List<String>类型的列表(比如wheat/crus/eggs是字符串列表)

// 假设你的条码字符串是barcodeStr,目标列表是targetList(List<String>类型)
Intent intent = new Intent(CurrentActivity.this, InformationActivity.class);

// 1. 传递条码字符串
intent.putExtra("EXTRA_BARCODE", barcodeStr);

// 2. 传递字符串列表:因为Intent只支持传递ArrayList,所以如果是普通List,先转成ArrayList
if (targetList != null) {
    intent.putStringArrayListExtra("EXTRA_TARGET_LIST", new ArrayList<>(targetList));
}

// 启动目标Activity
startActivity(intent);

情况2:传递的是自定义对象的列表(比如Wheat类的列表)

如果你的wheat/crus/eggs是自定义实体类的列表,必须让实体类实现Parcelable(推荐,效率更高)或者Serializable接口。

先给自定义类实现Parcelable:

public class Wheat implements Parcelable {
    // 假设你的类有这些字段
    private String id;
    private String name;
    private float weight;

    // 构造方法、getter/setter方法

    // Parcelable必须实现的方法
    protected Wheat(Parcel in) {
        id = in.readString();
        name = in.readString();
        weight = in.readFloat();
    }

    public static final Creator<Wheat> CREATOR = new Creator<Wheat>() {
        @Override
        public Wheat createFromParcel(Parcel in) {
            return new Wheat(in);
        }

        @Override
        public Wheat[] newArray(int size) {
            return new Wheat[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(id);
        dest.writeString(name);
        dest.writeFloat(weight);
    }
}

然后发送端传递自定义列表:

Intent intent = new Intent(CurrentActivity.this, InformationActivity.class);
intent.putExtra("EXTRA_BARCODE", barcodeStr);
// 传递自定义对象列表,同样需要转成ArrayList
if (wheatList != null) {
    intent.putParcelableArrayListExtra("EXTRA_WHEAT_LIST", new ArrayList<>(wheatList));
}
startActivity(intent);

二、接收端(InformationActivity)的正确写法

在onCreate方法中获取传递的数据,然后绑定到UI上显示:

情况1:接收字符串列表

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_information);

    // 1. 获取条码字符串
    String barcode = getIntent().getStringExtra("EXTRA_BARCODE");
    // 显示条码到TextView(假设你有一个id为tv_barcode的TextView)
    TextView tvBarcode = findViewById(R.id.tv_barcode);
    if (barcode != null) {
        tvBarcode.setText(barcode);
    }

    // 2. 获取目标列表
    ArrayList<String> targetList = getIntent().getStringArrayListExtra("EXTRA_TARGET_LIST");
    // 显示列表到RecyclerView/ListView(这里以RecyclerView为例)
    RecyclerView rvList = findViewById(R.id.rv_list);
    if (targetList != null && !targetList.isEmpty()) {
        // 用你自己的Adapter来加载列表,比如StringListAdapter
        rvList.setLayoutManager(new LinearLayoutManager(this));
        rvList.setAdapter(new StringListAdapter(targetList));
    }
}

情况2:接收自定义对象列表

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_information);

    String barcode = getIntent().getStringExtra("EXTRA_BARCODE");
    // 显示条码...

    // 获取自定义对象列表
    ArrayList<Wheat> wheatList = getIntent().getParcelableArrayListExtra("EXTRA_WHEAT_LIST");
    if (wheatList != null && !wheatList.isEmpty()) {
        // 设置到对应的Adapter显示
        RecyclerView rvWheat = findViewById(R.id.rv_wheat);
        rvWheat.setLayoutManager(new LinearLayoutManager(this));
        rvWheat.setAdapter(new WheatListAdapter(wheatList));
    }
}

三、常见问题排查

  • Key不匹配:发送和接收时的EXTRA_BARCODE、EXTRA_TARGET_LIST这类key必须完全一致(大小写敏感),否则会拿到null
  • 列表为null:发送前一定要判断列表是否为空,避免传递null导致接收端无法显示
  • 全局Intent复用:不要把Intent声明为全局变量反复使用,每次跳转都创建新的Intent,确保数据是最新的
  • 自定义对象未序列化:如果是自定义类列表,必须实现Parcelable/Serializable,否则传递会失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:04:23