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

如何将RecyclerView中编辑后的值传递回Activity

如何将RecyclerView中编辑后的数据传回原Activity?

嘿,我来帮你解决这个问题!要把RecyclerView里修改后的数据传回原Activity,其实用接口回调是最规范且灵活的方式,刚好你的Adapter里已经有ItemClickListener的雏形了,咱们可以基于它来完善,另外也给你补充批量获取数据的方式,按需选择:

方案一:接口回调(实时获取单条修改数据)

这种方式能让Activity实时知道哪条数据被修改了,适合需要实时处理的场景:

  1. 完善Adapter的回调接口
    在你的AlarmAdapter类里,给ItemClickListener添加传递修改后数据的方法:

    public interface ItemClickListener {
        void onItemDataChanged(int position, String newData);
    }
    

    同时修改Adapter的构造方法,把接口实例传进来:

    public AlarmAdapter(Context context, ArrayList<String> dates, ItemClickListener listener) {
        this.context = context;
        this.dates = dates;
        this.mListener = listener;
    }
    
  2. 修改数据时触发回调
    在你设置时间选择器结果的代码里,更新Adapter的数据源并通知Activity:

    holder.mTxtTimeLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // 你原本的时间选择器逻辑,获取到用户选择的时间
            String newTime = df.format(c.getTime());
            holder.mTxtTimeLayout.setText(newTime);
            
            // 1. 更新Adapter内部的数据源
            dates.set(position, newTime);
            // 2. 调用接口回调,把修改后的数据和位置传给Activity
            if (mListener != null) {
                mListener.onItemDataChanged(position, newTime);
            }
        }
    });
    
  3. 在Activity中实现回调接口
    让你的原Activity实现这个接口,就能接收修改后的数据了:

    public class YourActivity extends AppCompatActivity implements AlarmAdapter.ItemClickListener {
        private ArrayList<String> mDates;
        private AlarmAdapter mAdapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.your_activity_layout);
            
            // 初始化数据源(比如从Intent或者本地获取)
            mDates = new ArrayList<>();
            mDates.add("08:00");
            mDates.add("12:30");
            
            // 初始化Adapter,传入当前Activity作为回调实例
            mAdapter = new AlarmAdapter(this, mDates, this);
            RecyclerView recyclerView = findViewById(R.id.recycler_view);
            recyclerView.setAdapter(mAdapter);
            // 记得设置LayoutManager,比如线性布局
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
        }
    
        // 实现接口的回调方法
        @Override
        public void onItemDataChanged(int position, String newData) {
            // 这里就能拿到修改后的位置和数据啦!
            // 你可以在这里更新Activity的数据源(如果和Adapter用的是同一个列表,其实已经同步了,显式更新更清晰)
            mDates.set(position, newData);
            // 还可以做其他操作,比如实时保存到SharedPreferences或者数据库
        }
    }
    

方案二:批量获取所有修改后的数据

如果不需要实时监听,只是在某个时机(比如用户点击保存按钮)一次性获取所有数据,直接从Adapter的数据源拿就可以:

在Activity里的保存按钮点击事件中:

btnSave.setOnClickListener(v -> {
    // 直接从Adapter获取更新后的所有数据
    ArrayList<String> updatedDates = mAdapter.dates;
    // 接下来就可以处理这些数据啦,比如提交到服务器或者保存本地
});

注意:如果是EditText而不是TextView(你提到EditText但代码里是TextView,可能笔误),可以给EditText添加TextWatcher监听输入变化,然后在afterTextChanged方法里触发回调或者更新数据源,逻辑和上面一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:01:22