簡體   English   中英

如何使用 RecyclerView.ViewHolder Android Studio 獲得項目的總價值

[英]How can I get a total value of items using RecyclerView.ViewHolder Android Studio

我正在開發活動,它會顯示在回收站視圖中設置的項目的 itemName、itenQty 和價格。 我想得到所有物品的總價。 我如何使用 for 循環或其他方式來獲得總計。

私有 static class ViewHolder 擴展 RecyclerView.ViewHolder {

    private AppCompatEditText txtProductName, txtQuantity, txtPrice;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        txtProductName = itemView.findViewById(R.id.inputDescription);
        txtQuantity = itemView.findViewById(R.id.inputQty);
        txtPrice = itemView.findViewById(R.id.inputPrice);
    }

    void bind(PurchaseOrderDT dt) {
        txtProductName.setText(dt.getItemDescription());
        txtQuantity.setText(String.format(Locale.ENGLISH, "%d", dt.getQty()));
        txtPrice.setText(String.format(Locale.ENGLISH, "%,.2f", dt.getPrice()));

        //getting grand total of item prices

    }
}

購買訂購DT Class

public class PurchaseOrderDT extends Product implements Parcelable {

    public static final Creator<PurchaseOrderDT> CREATOR = new Creator<PurchaseOrderDT>() {
        @Override
        public PurchaseOrderDT createFromParcel(Parcel in) {
            return new PurchaseOrderDT(in);
        }

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

    @SerializedName("qty")
    private int qty;

    @SerializedName("price")
    private double price;

    protected PurchaseOrderDT(Parcel in) {
        super(in);
        Bundle data = in.readBundle(getClass().getClassLoader());
        qty = data.getInt("qty");
        price = data.getDouble("price");
    }

    public PurchaseOrderDT() {
    }

    public PurchaseOrderDT(@NonNull Product product) {
        itemId = product.itemId;
        itemCategory2 = product.itemCategory2;
        itemCode = product.itemCode;
        itemDescription = product.itemDescription;
        itemPrice = product.itemPrice;
        availableQuantity = product.availableQuantity;
        discountPercentage = product.discountPercentage;
        discountValue = product.discountValue;
    }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        super.writeToParcel(dest, flags);
        Bundle data = new Bundle();
        data.putInt("qty", qty);
        data.putDouble("price",price);
        dest.writeBundle(data);
    }

    public int getQty() {
        return qty;
    }

    public void setQty(int qty) {
        this.qty = qty;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

主要活動代碼

public class ViewPurchaseOrderActivity extends BaseActivity {

    public static final String ARG_PURCHASE_ORDER = "po";
    private AppCompatEditText txtPoNumber, txtRequestedDate, txtToBeDelivered;
    private RecyclerViewAdapter<PurchaseOrderDT, ViewHolder> adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_purchase_order);

        txtPoNumber = findViewById(R.id.txt_po_number);
        txtRequestedDate = findViewById(R.id.txt_requested_date);
        txtToBeDelivered = findViewById(R.id.txt_date);

        RecyclerView list = findViewById(android.R.id.list);
        DividerItemDecoration decoration = new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL);
        decoration.setDrawable(ContextCompat.getDrawable(getContext(), R.drawable.list_separator));
        list.addItemDecoration(decoration);
        list.setAdapter(adapter = new RecyclerViewAdapter<PurchaseOrderDT, ViewHolder>() {

            @Override
            public void onBindViewHolder(ViewHolder holder, int position, ArrayList<PurchaseOrderDT> mValues) {
                holder.bind(mValues.get(position));
            }

            @NonNull
            @Override
            public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(getContext()).inflate(R.layout.layout_view_po_item, parent, false);
                return new ViewHolder(view);
            }
        });
    }

    @Override
    protected void onPostCreate(@Nullable Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        final PurchaseOrderHD header = getIntent().getParcelableExtra(ARG_PURCHASE_ORDER);
        setTitle("View Purchase Order");
        RestFulWebService.getRestFulWebService().getPurchaseOrderDetail(header.getId()).enqueue(new Callback<ArrayList<PurchaseOrderDT>>() {

            @Override
            public void onResponse(@NonNull Call<ArrayList<PurchaseOrderDT>> call, @NonNull Response<ArrayList<PurchaseOrderDT>> response) {
                ArrayList<PurchaseOrderDT> details;
                if (response.isSuccessful() && (details = response.body()) != null) {
                    txtPoNumber.setText(header.getPoNumber());
                    txtRequestedDate.setText(header.getDate());
                    txtToBeDelivered.setText(header.getRequiredDate());
                    adapter.changeDataSet(details);
                } else {
                    Toast.makeText(getContext(), "Unable to fetch data", Toast.LENGTH_LONG).show();
                }
            }

        });
    }

    private static class ViewHolder extends RecyclerView.ViewHolder {

        private AppCompatEditText txtProductName, txtQuantity, txtPrice;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            txtProductName = itemView.findViewById(R.id.inputDescription);
            txtQuantity = itemView.findViewById(R.id.inputQty);
            txtPrice = itemView.findViewById(R.id.inputPrice);
        }

        void bind(PurchaseOrderDT dt) {
            txtProductName.setText(dt.getItemDescription());
            txtQuantity.setText(String.format(Locale.ENGLISH, "%d", dt.getQty()));
            txtPrice.setText(String.format(Locale.ENGLISH, "%,.2f", dt.getPrice()));

            //getting grand total of item prices

        }
    }
}

我這樣設置適配器:

    public class CitiesAdapter extends RecyclerView.Adapter<CitiesAdapter.ViewHolder> {
        public static ArrayList<City> localDataSet;
        ...
    public CitiesAdapter() {
        //constructor
        localDataSet = new ArrayList<City>();
        ...
    @Override
    public void onBindViewHolder(ViewHolder viewHolder, final int position) {
    City city = localDataSet.get( position );
    ...

在設置適配器的活動中:

//code
cityAdapter = new CitiesAdapter();
//The data set in the adapter has been initialized at this point.
//So you can populate it here. CitiesAdapter.localDataSet.add() etc
cityView.setAdapter( cityAdapter );

如果適配器中的項目值發生變化,則更新適配器中的數據數組。 因此,您可以獲得如下總數:

int totalCities = 0;
for (City city : CitiesAdapter.localDataSet) {
    totalCities++;
}
//totalCities = total.

否則,您也可以通過 RecyclerView 獲取項目。

private RecyclerView rvActions; //top of activity class
rvActions = findViewById(R.id.listedActions); //in OnCreate(). A RecyclerView

RecyclerView.ViewHolder viewHolder = rvActions.findViewHolderForAdapterPosition(position);
if ( viewHolder != null ) {
    TextView aDesc = viewHolder.itemView.findViewById(R.id.a_desc);
    //getText()?
    viewHolder.itemView.setBackgroundColor(
        ContextCompat.getColor(getApplicationContext(), R.color.white));
}

嘗試這樣的事情:

float totAmount=0.0;
  for (int counter = 0; counter < dt.size(); counter++) {             
      totAmount = totAmount + dt.get(counter).price;        
  }     

totAmount 將具有您想要的值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM