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

时间:2017-01-25 08:44:06

标签: java android arraylist

在下面的android活动中,尝试在视图寻呼机中显示数据,并且它正在按预期工作。

但是在loadItemsForSuppliers方法中,当我将SupplierAndItemList对象添加到它的arraylist时,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];
        }
    };
}

2 个答案:

答案 0 :(得分:1)

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

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;
                }

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

答案 1 :(得分:-1)

设置

mPager.setOffscreenPageLimit(1);