繁体   English   中英

在回收者视图中,如何在每个按钮或图标上单击该卡时创建新卡

[英]In recycler view , how do i create new card on every button or icon click in that card

我的卡片视图包含一些文本视图和编辑文本,例如名称,产品,代码,数量,总数等。我想在回收者视图中创建卡片视图,以便在每个按钮单击(或+图标单击)时都显示新卡片。 然后,单击最后一个按钮,所有卡的所有edittext值将存储在数组列表中。 我很困惑该怎么做。 我看到的所有教程都具有解析或从两个数据库中获取值的功能,但是我希望我的cardview能够从用户和存储中获取值以及在单击新按钮时创建值。

使用CardView创建布局文件my_card_view_item.xml,并为RecyclerView定义适配器,如下所示:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

    List<String> myList;

    public MyAdapter(List<String> myList) {
        this.myList = myList;
    }

    public void addItem() {
        myList.add(new String());
        notifyItemInserted(myList.size() - 1);
    }

    @Override
    public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_card_view_item, parent, false);
        return new MyViewHolder(v);
    }

    @Override
    public void onBindViewHolder(MyAdapter.MyViewHolder holder, int position) {
        // bind your view

        holder.editText.setText(myList.get(position));
    }

    @Override
    public int getItemCount() {
        return myList.size();
    }


    public class MyViewHolder extends RecyclerView.ViewHolder {

        EditText editText;
        Button btn_remove;

        public MyViewHolder(View itemView) {
            super(itemView);
            editText = (EditText) itemView.findViewById(R.id.editText);
            btn_remove = (Button) itemView.findViewById(R.id.btn_remove);

            editText.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                }

                @Override
                public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                    myList.set(getAdapterPosition(), charSequence.toString());
                }

                @Override
                public void afterTextChanged(Editable editable) {

                }
            });


            btn_remove.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    myList.remove(getAdapterPosition());
                    notifyItemRemoved(getAdapterPosition());
                    notifyItemRangeChanged(getAdapterPosition(), myList.size());
                }
            });
        }
    }
}

您需要存储用户输入的数据并将其显示在onBindViewHolder方法中,以防止数据丢失或数据冲突。
创建适配器的实例并将其设置为RecyclerView。 现在,在您的+按钮的OnClickListener事件上,调用适配器的addItem方法:

    btn_add.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            adapter.addItem();
        }
    });

最后,您可以获取所有卡的EditText值并将其存储在数组中:

    btn_final.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            for (int i = 0; i < adapter.getItemCount(); i++) {
                EditText et = (EditText) recyclerView.getLayoutManager().findViewByPosition(i).findViewById(R.id.edit_text);
                // Store et.getText() in your array
            }
        }
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM