如何从Activity向RecyclerView Adapter传递并接收数据?
解决RecyclerView Adapter接收Activity数据的问题(替代错误的Intent方式)
嘿,你之前用Intent启动CarrinhoItemPedidoAdapter的方式完全搞错啦!Adapter根本不是Activity或者Service这类可以通过startActivity()启动的组件,咱们得换个直接的思路——通过Adapter的构造方法或者自定义方法直接传递数据就行,下面给你一步步讲怎么改:
第一步:给Adapter添加数据传递的方法
你的Adapter目前是通过构造方法接收初始的List<Pedidos>,如果要动态添加单个商品数据,可以给Adapter加一个添加数据的方法;如果是替换整个列表,就加一个更新列表的方法。
方式1:添加单个商品项
在CarrinhoItemPedidoAdapter里新增这个方法:
// 向Adapter的列表中添加单个订单商品 public void addPedidoItem(Pedidos newPedido) { mUploadsPedidoCliente.add(newPedido); // 通知RecyclerView刷新新添加的那一项,比notifyDataSetChanged()更高效 notifyItemInserted(mUploadsPedidoCliente.size() - 1); }
方式2:替换整个订单列表(如果需要批量更新)
如果需要一次性替换所有数据,可以加这个方法:
// 替换Adapter的整个订单列表 public void setPedidosList(List<Pedidos> newPedidosList) { mUploadsPedidoCliente.clear(); mUploadsPedidoCliente.addAll(newPedidosList); notifyDataSetChanged(); // 通知RecyclerView刷新所有项 }
第二步:在Activity里直接给Adapter传递数据
首先你得在PedidoDetalhesActivity里已经初始化好了RecyclerView和Adapter,比如:
// 假设这部分初始化代码已经在你的Activity里了 List<Pedidos> pedidoItemList = new ArrayList<>(); CarrinhoItemPedidoAdapter pedidoAdapter = new CarrinhoItemPedidoAdapter(this, pedidoItemList); // 绑定到RecyclerView RecyclerView recyclerView = findViewById(R.id.你的RecyclerViewID); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setAdapter(pedidoAdapter);
然后修改你原来的confirmar_pedido点击事件,删掉Intent相关的代码,换成直接调用Adapter的方法:
confirmar_pedido.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 1. 先把你要传递的数据封装成Pedidos对象 Pedidos novoItemPedido = new Pedidos(); novoItemPedido.setIdProd(up.getmKey().toString().trim()); // 商品ID novoItemPedido.setDescricao(value); // 商品名称 novoItemPedido.setPrice(convertendo); // 商品价格 // 记得补充设置quantity(数量),根据你的业务逻辑赋值 // 2. 直接调用Adapter的方法添加数据 pedidoAdapter.addPedidoItem(novoItemPedido); } });
关键提醒
Intent是Android用来在不同组件(Activity、Service、BroadcastReceiver)之间传递数据的工具,而RecyclerView Adapter只是一个负责把数据绑定到UI上的辅助类,属于当前Activity的一部分,所以直接通过方法调用传递数据才是正确的姿势~
内容的提问来源于stack exchange,提问作者Gabriel Nogueira
相关产品推荐
相关产品推荐

