首页 > 解决方案 > 在 recyclerview 中动态地将项目添加到列表中并复制到片段中的列表中

问题描述

我正在通过输入对话框将项目添加到 Recyclerview 适配器中的列表。当用户在文本字段中输入值并单击提交按钮时,我希望将输入的值添加到在片段中声明为公共的列表中,这样如果我转到片段并单击showListSize按钮,我应该看到列表的大小(在片段中)大于 0;

在 RecyclerView 的列表中添加一个项目是可行的,但大小不能超过 1。我可能做错了什么。

这是一个示例代码:

//Adapter, constructor and variables declaration
//on create viewholder


 @Override
public void onBindViewHolder(ViewHolder holder, final int position) {

    List<Item2> valuesList = new ArrayList<Item2>(child.get(groupname));
    childSize = valuesList.size();

    Log.i("List size", String.valueOf(childSize));

    if (childSize > 0){
        //final String childText = (String) getChild(groupPosition,position);

        final Item2 item = valuesList.get(position);

        holder.name.setText(item.getItemName());
        //holder.itemImage.setImageResource(Integer.parseInt(item.getImageUrl()));

        holder.price.setText(String.valueOf(item.getPrice()));

        holder.cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                final Dialog dialog = new Dialog(context);
             
                dialog.setContentView(R.layout.select_quantity);

                Button button_submit = dialog.findViewById(R.id.btn_submit);
                final EditText edQuantity = dialog.findViewById(R.id.txt_quantity);
                edQuantity.setText("0");

                button_submit.setOnClickListener(new View.OnClickListener() {

                    float totalPrice = 0;

                    @Override
                    public void onClick(View view) {

                        String quantity = edQuantity.getText().toString();
       
                        totalPrice = Float.parseFloat(quantity) * Float.parseFloat(item.getPrice());

                        myLocal.add(new CartItem(quantity, item.getItemName(), item.getPrice(),String.valueOf(totalPrice)));

                        AllProducts myProducts = new AllProducts(); //this is the fragment

                        myProducts.theSelected.add(new CartItem(quantity,item.getItemName(), item.getPrice(),String.valueOf(totalPrice)));
                             
                      Log.i("size(Recycler)",String.valueOf(myProducts.theSelected.size())); //this is ok returns 1

                     dialog.dismiss();
                    }
                });

                dialog.show();
                        

全部产品片段

public List<CartItem> theSelected = new ArrayList<CartItem>();//list declaration

 btnShowListSize.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            
            Log.i("list(AllProducts)", String.valueOf(theSelected.size()));//returns 0
        }
    });

标签: androidandroid-fragmentsandroid-recyclerview

解决方案


我像这样定义了一个全局 ArrayList

private List<Items> selectedItems = new ArrayList<>();

然后是添加项目的方法,仍然在全局类中

public void addItems(Item item) {
        this.selectedItems.add(item);
    }

然后在项目某处的一个类中:

final Globals myGlobals = Globals.getInstance();

Item myItem = new Item("var1", "var2", "var3");

myGlobals.addItems(myItem);

推荐阅读