在回收者视图中,我如何在单击该卡片中的每个按钮或图标时创建新卡片
In recycler view , how do i create new card on every button or icon click in that card
我的卡片视图由一些文本视图和编辑文本组成,例如名称、产品、代码、数量、总数等。我想在回收站视图中创建卡片视图,以便在每次单击(或 + 图标单击)新卡片时出现。单击下面的最后一个按钮,所有卡片的编辑文本的所有值都会存储在数组列表中。我很困惑该怎么做。我看到的所有教程都从任一数据库中解析或获取值,但我希望我的卡片视图从用户和存储中获取值,并在单击新按钮时创建。
使用您的 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
}
}
});
我的卡片视图由一些文本视图和编辑文本组成,例如名称、产品、代码、数量、总数等。我想在回收站视图中创建卡片视图,以便在每次单击(或 + 图标单击)新卡片时出现。单击下面的最后一个按钮,所有卡片的编辑文本的所有值都会存储在数组列表中。我很困惑该怎么做。我看到的所有教程都从任一数据库中解析或获取值,但我希望我的卡片视图从用户和存储中获取值,并在单击新按钮时创建。
使用您的 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
}
}
});