如何使用RecyclerView.ViewHolder Android Studio获取项目的总价值



我正在开发活动,它在Recycler视图中显示项目集的itemName、itenQty和价格。我想知道所有商品的总价。我如何使用for循环或其他方式来获得总计。

私有静态类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
}
}

PurchaseOrderDT类

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将具有您想要的值

最新更新