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

Android技术问题:不使用Intent如何传递ArrayList?

几种在Activity中访问Adapter内部ArrayList的实用方案

嘿,这个场景太常见了!当RecyclerView和Adapter绑定后,想要在Activity里访问Adapter内部的ArrayList完全不需要用Intent,这里有几个实用的方案供你选择:

1. 给Adapter添加Getter方法(最直接的方案)

这是最简单粗暴的方式——直接在你的Adapter类里写一个公开的方法,返回内部的ArrayList实例。

比如在你的Adapter里:

public class YourAdapter extends RecyclerView.Adapter<YourAdapter.ViewHolder> {
    private ArrayList<YourModel> mDataList;

    // 构造方法
    public YourAdapter(ArrayList<YourModel> dataList) {
        this.mDataList = dataList;
    }

    // 添加Getter方法,暴露内部集合
    public ArrayList<YourModel> getDataList() {
        return mDataList;
    }

    // ... 省略ViewHolder、onCreateViewHolder、onBindViewHolder等核心代码
}

然后在你的Activity里,只要持有Adapter的实例,就能直接调用这个方法拿到集合:

// 假设你已经完成了Adapter和RecyclerView的绑定
YourAdapter mAdapter = new YourAdapter(initialData);
mRecyclerView.setAdapter(mAdapter);

// 想要访问集合的时候直接调用
ArrayList<YourModel> adapterData = mAdapter.getDataList();
// 现在你可以对这个集合进行任何操作,比如遍历、修改
// 注意:如果修改了集合内容,记得调用mAdapter.notifyDataSetChanged()(或者更细粒度的刷新方法)来更新RecyclerView的UI

2. 让Activity和Adapter共享同一个集合引用(更优雅的方案)

其实你完全可以把集合的所有权放在Activity这边——在Activity里创建ArrayList,然后把它的引用传给Adapter的构造方法。这样Activity本身就持有集合的引用,根本不用从Adapter里拿。

比如在Activity里:

// 初始化集合,Activity持有这个引用
ArrayList<YourModel> mDataList = new ArrayList<>();
// 把集合传给Adapter,Adapter操作的是同一个实例
YourAdapter mAdapter = new YourAdapter(mDataList);
mRecyclerView.setAdapter(mAdapter);

// 之后在Activity里可以直接操作mDataList
mDataList.add(new YourModel("新增数据"));
// 用更高效的方式刷新UI
mAdapter.notifyItemInserted(mDataList.size() - 1);

这种方式的好处是数据职责更清晰:Activity负责管理数据源,Adapter只专注于数据展示,代码也更简洁。

3. 使用ViewModel共享数据(适合复杂项目/配置变化场景)

如果你的项目使用了Jetpack组件,把数据源放在ViewModel里是更专业的选择。ViewModel可以在屏幕旋转等配置变化时保留数据,而且Activity和Adapter都能获取到同一个集合实例,避免内存泄漏和数据丢失。

先定义一个ViewModel:

public class YourViewModel extends ViewModel {
    // 用MutableLiveData包装集合,方便观察数据变化
    private MutableLiveData<ArrayList<YourModel>> mDataList = new MutableLiveData<>();

    public YourViewModel() {
        // 初始化空集合
        mDataList.setValue(new ArrayList<>());
    }

    public MutableLiveData<ArrayList<YourModel>> getDataList() {
        return mDataList;
    }
}

然后在Activity里:

// 获取ViewModel实例
YourViewModel mViewModel = new ViewModelProvider(this).get(YourViewModel.class);

// 观察数据变化,自动更新Adapter
mViewModel.getDataList().observe(this, updatedDataList -> {
    mAdapter.notifyDataSetChanged();
});

// 直接获取集合进行操作
ArrayList<YourModel> currentData = mViewModel.getDataList().getValue();
if (currentData != null) {
    currentData.add(new YourModel("新数据"));
    mViewModel.getDataList().postValue(currentData);
}

Adapter可以通过构造方法传入ViewModel的LiveData,或者直接获取集合实例,这样两者共享同一个数据源,既安全又符合现代Android架构规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:07:45