java - 将Arraylist添加到自定义对象不更新android中的值

标签 java android arraylist

在下面的 Android Activity 中,尝试在 View 寻呼机中显示数据,并且它按预期工作。

但是在loadItemsForSuppliers方法中,当我将SupplierAndItemList对象添加到它的数组列表中时,从getInventoriesByItemDetails方法返回的值没有正确更新,而是始终采用最后一个值。

有人可以帮助我这里出了什么问题吗?

     public class ScreenSlidePagerActivity extends BaseActivity {
                private ViewPager mPager;
                private PagerAdapter mPagerAdapter;
                private Dealer dealerObject;
                private ArrayList<ItemDetail> itemDetails;
                private List<Dealer> supplierList;
                private ArrayList<SupplierAndItemList> supplierAndItemLists = new ArrayList<>();


            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_screen_slide);
                dealerObject = getIntent().getParcelableExtra(UiConstants.DEALER_OBJECT);
                itemDetails = getIntent().getParcelableArrayListExtra("itemDetails");
                supplierList = dealerObject.getParentSalesPoints(this,dealerObject.getServerId());

                loadItemsForSuppliers();

                mPager = (ViewPager) findViewById(R.id.pager);
                mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager(),supplierAndItemLists);
                mPager.setAdapter(mPagerAdapter);
            }

            private void loadItemsForSuppliers() {
                 for (Dealer dealer : supplierList) {
                     ArrayList<ItemDetail> inventories = new ArrayList<>();

                     SupplierAndItemList supplierAndItem = new SupplierAndItemList();
                     supplierAndItem.setDealerName(dealer.getDealerName());
                     supplierAndItem.setSelectedItemList(getInventoriesByItemDetails(dealer, inventories));
                  supplierAndItemLists.add(supplierAndItem);

                 }
            }

            private ArrayList<ItemDetail> getInventoriesByItemDetails(Dealer dealer, ArrayList<ItemDetail> inventories) {

                    for (ItemDetail id : itemDetails) {
                        DealerInventory dealerInventory = new DealerInventory();
                        dealerInventory = dealerInventory.getLastModifiedInventory(this, id.getItemId(), dealer.getId());
                        if (dealerInventory != null) {
                            if (dealerInventory.getQuantity() >= 0) {
                                id.setParentSalesPointLastStock(String.valueOf(dealerInventory.getQuantity()));
                                id.setParentSalesPointLastStockTakingDate(dealerInventory.getStockTakingDate());
                            }
                        } else {
                            id.setParentSalesPointLastStock(UiConstants.NA);
                            id.setParentSalesPointLastStockTakingDate(UiConstants.NA);
                        }
                        inventories.add(id);
                    }
                    return inventories;
                }

    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
        private final ArrayList<SupplierAndItemList> supplierAndItemList;
        public ScreenSlidePagerAdapter(FragmentManager fm, ArrayList<SupplierAndItemList> supplierAndItemList) {
            super(fm);
            this.supplierAndItemList = supplierAndItemList;
        }

        @Override
        public Fragment getItem(int position) {
            SupplierAndItemList supplierAndItems = supplierAndItemList.get(position);
            ScreenSlidePageFragment f = new ScreenSlidePageFragment();
            Bundle bundle = new Bundle();
            bundle.putParcelableArrayList("supplierAndItems",supplierAndItems.getSelectedItemList());
            bundle.putString("supplierName",supplierAndItems.getDealerName());
            f.setArguments(bundle);
            return f;
        }

        @Override
        public int getCount() {
            return supplierAndItemList.size();
        }
    }
  }

SupplierAndItemList 类

public class SupplierAndItemList implements Parcelable {
    public String dealerName;
    public ArrayList<ItemDetail> selectedItemList;

    public SupplierAndItemList() {
        selectedItemList = new ArrayList<>();
    }

    public String getDealerName() {
        return dealerName;
    }

    public void setDealerName(String dealerName) {
        this.dealerName = dealerName;
    }

    public ArrayList<ItemDetail> getSelectedItemList() {
        return selectedItemList;
    }

    public void setSelectedItemList(ArrayList<ItemDetail> itemList) {
        this.selectedItemList = itemList;
    }

    protected SupplierAndItemList(Parcel in) {
        dealerName = in.readString();
        selectedItemList = in.readArrayList(ItemDetail.class.getClassLoader());
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(dealerName);
        dest.writeList(selectedItemList);
    }

    @SuppressWarnings("unused")
    public static final Parcelable.Creator<SupplierAndItemList> CREATOR = new Parcelable.Creator<SupplierAndItemList>() {
        @Override
        public SupplierAndItemList createFromParcel(Parcel in) {
            return new SupplierAndItemList(in);
        }

        @Override
        public SupplierAndItemList[] newArray(int size) {
            return new SupplierAndItemList[size];
        }
    };
}

ItemDetail 类

public class ItemDetail implements Parcelable {

    public int itemId;
    public String itemName;

    public String salesPointLastStock;
    public String salesPointLastStockTakingDate;
    public String parentSalesPointLastStock;
    public String parentSalesPointLastStockTakingDate;

    public IDStockInput idStockInput;
    public IDReturnInput idReturnInput;
    public IDOrderInput idOrderInput;

    public boolean isSelected;

    public boolean isSelected() {
        return isSelected;
    }

    public void setIsSelected(boolean isUpdated) {
        this.isSelected = isUpdated;
    }

    public String getParentSalesPointLastStockTakingDate() {
        return parentSalesPointLastStockTakingDate;
    }

    public void setParentSalesPointLastStockTakingDate(String parentSalesPointLastStockTakingDate) {
        this.parentSalesPointLastStockTakingDate = parentSalesPointLastStockTakingDate;
    }

    public String getParentSalesPointLastStock() {
        return parentSalesPointLastStock;
    }

    public void setParentSalesPointLastStock(String parentSalesPointLastStock) {
        this.parentSalesPointLastStock = parentSalesPointLastStock;
    }

    @NonNull
    public int getItemId() {
        return itemId;
    }

    public void setItemId(int itemId) {
        this.itemId = itemId;
    }

    @NonNull
    public String getItemName() {
        return itemName;
    }

    public void setItemName(String itemName) {
        this.itemName = itemName;
    }

    @NonNull
    public String getSalesPointLastStock() {
        return salesPointLastStock;
    }

    public void setSalesPointLastStock(String salesPointLastStock) {
        this.salesPointLastStock = salesPointLastStock;
    }

    @NonNull
    public String getSalesPointLastStockTakingDate() {
        return salesPointLastStockTakingDate;
    }

    public void setSalesPointLastStockTakingDate(String salesPointLastStockTakingDate) {
        this.salesPointLastStockTakingDate = salesPointLastStockTakingDate;
    }

    public IDStockInput getIdStockInput() {
        return idStockInput;
    }

    public void setIdStockInput(IDStockInput idStockInput) {
        this.idStockInput = idStockInput;
    }

    public IDReturnInput getIdReturnInput() {
        return idReturnInput;
    }

    public void setIdReturnInput(IDReturnInput idReturnInput) {
        this.idReturnInput = idReturnInput;
    }

    public IDOrderInput getIdOrderInput() {
        return idOrderInput;
    }

    public void setIdOrderInput(IDOrderInput idOrderInput) {
        this.idOrderInput = idOrderInput;
    }

    public ItemDetail() {
        idStockInput = new IDStockInput();
        idReturnInput = new IDReturnInput();
        idOrderInput = new IDOrderInput();
    }

    protected ItemDetail(Parcel in) {
        itemId = in.readInt();
        itemName = in.readString();
        salesPointLastStock = in.readString();
        salesPointLastStockTakingDate = in.readString();
        parentSalesPointLastStock = in.readString();
        parentSalesPointLastStockTakingDate = in.readString();
        isSelected =in.readInt()==1;
        idStockInput = (IDStockInput) in.readValue(IDStockInput.class.getClassLoader());
        idReturnInput = (IDReturnInput) in.readValue(IDReturnInput.class.getClassLoader());
        idOrderInput = (IDOrderInput) in.readValue(IDOrderInput.class.getClassLoader());
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(itemId);
        dest.writeString(itemName);
        dest.writeString(salesPointLastStock);
        dest.writeString(salesPointLastStockTakingDate);
        dest.writeString(parentSalesPointLastStock);
        dest.writeString(parentSalesPointLastStockTakingDate);
        dest.writeInt(isSelected ? 1 : 0);
        dest.writeValue(idStockInput);
        dest.writeValue(idReturnInput);
        dest.writeValue(idOrderInput);
    }

    @SuppressWarnings("unused")
    public static final Parcelable.Creator<ItemDetail> CREATOR = new Parcelable.Creator<ItemDetail>() {
        @Override
        public ItemDetail createFromParcel(Parcel in) {
            return new ItemDetail(in);
        }

        @Override
        public ItemDetail[] newArray(int size) {
            return new ItemDetail[size];
        }
    };
}

最佳答案

我已经通过你的方法发现了一些赋值问题

private void loadItemsForSuppliers() {
                 for (Dealer dealer : supplierList) {
                     ArrayList<ItemDetail> inventories = new ArrayList<>();

                     SupplierAndItemList supplierAndItem = new SupplierAndItemList();
                     supplierAndItem.setDealerName(dealer.getDealerName());
                     supplierAndItem.setSelectedItemList(getInventoriesByItemDetails(dealer, inventories));
                  supplierAndItemLists.add(supplierAndItem);

                 }
            }

            private ArrayList<ItemDetail> getInventoriesByItemDetails(Dealer dealer, ArrayList<ItemDetail> inventories) {

                    for (ItemDetail id : itemDetails) {
                        DealerInventory dealerInventory = new DealerInventory();
                        dealerInventory = dealerInventory.getLastModifiedInventory(this, id.getItemId(), dealer.getId());
                        if (dealerInventory != null) {
                            if (dealerInventory.getQuantity() >= 0) {
                                id.setParentSalesPointLastStock(String.valueOf(dealerInventory.getQuantity()));
                                id.setParentSalesPointLastStockTakingDate(dealerInventory.getStockTakingDate());
                            }
                        } else {
                            id.setParentSalesPointLastStock(UiConstants.NA);
                            id.setParentSalesPointLastStockTakingDate(UiConstants.NA);
                        }
                    inventories.add(id); // do this
                    }
                    return inventories; // you are not assigning value  anywhere;
                }

您没有为 getInventoriesByItemDetails 中的inventories 赋值。我认为你应该通过 inventories.add(id); 添加项目 检查一下,希望有帮助

关于java - 将Arraylist添加到自定义对象不更新android中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41846953/

相关文章:

java - 使用android中的房间数据库删除保存在文件夹中的照片

android - 在不同的 Android 版本上动态更改工具栏菜单项文本颜色

java - 如何格式化或解析 SOAP 原始对象

java - 如何在 Android Wear 上调整下巴布局?

python - 为什么我的 lambda 消失了?

java - 高效添加 ArrayList 元素

Java 查找最大元素

java - 多态性、自动装箱和隐式转换

java - 使用 JRadioButtons 更改 JTable 中的列不会刷新结构

java - 原生比。 Protoc编译器选项