android - 在 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
}
});
解决方案
我像这样定义了一个全局 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);
推荐阅读
- javascript - React 无法通过 prop 数组映射
- reactjs - 新应用程序上的 react-native-gesture-handler 包错误
- node.js - 如何 NPM 发布,以便消费者可以从不同的顶级目录导入
- c# - 如何编写自定义文本阅读器
- c# - 如何将我的 excel 文件的第一行与存储在变量中的值进行比较,以查看它们是否匹配?
- javascript - 如何使用 v8 typescript 中发布的顶级异步等待
- java - 如何在 Display() 上显示消息 ()?
- python - min 函数返回不是最小/最小的值
- python - 结合两个熊猫数据框而不包含重复项?
- hibernate - 在 Spring Boot 应用程序中,Hibernate SQL 语句没有使用 log4j 登录到单独的日志文件中