package com.hotel;
import java.util.ArrayList;
import android.app.Activity;
import android.content.res.Resources;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class CustomOrderedItemAdapter extends ArrayAdapter {
Activity activity;
ArrayList orderedList;
Resources res;
final int price = 50;
final int qty = 1;
static int total;
public CustomOrderedItemAdapter(Activity activity, ArrayList orderedList,
Resources res) {
super(activity, R.layout.ordered_item_cell, orderedList);
this.activity = activity;
this.orderedList = orderedList;
this.res = res;
}
public static class ViewHolder {
TextView textOrderedItem, textItemQty, textOrderedItemPrice;
ImageView orderedItemImg;
Button btnUp, btnDown, btnDeleteOrderedItem;
//int total;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final int deletePosition = position;
final ViewHolder holder;
LayoutInflater inflater = (LayoutInflater) activity
.getSystemService(activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = inflater.inflate(R.layout.ordered_item_cell, null);
holder = new ViewHolder();
holder.textOrderedItem = (TextView) convertView
.findViewById(R.id.textOrderedItem);
holder.orderedItemImg = (ImageView) convertView
.findViewById(R.id.orderedItemImg);
holder.textItemQty = (TextView) convertView
.findViewById(R.id.textItemQty);
holder.textItemQty.setText("1");
holder.btnUp = (Button) convertView.findViewById(R.id.btnUp);
holder.btnDown = (Button) convertView.findViewById(R.id.btnDown);
holder.textOrderedItemPrice = (TextView) convertView
.findViewById(R.id.textOrderedItemPrice);
holder.textOrderedItemPrice.setText("50");
holder.btnDeleteOrderedItem = (Button) convertView
.findViewById(R.id.btnDeleteOrderedItem);
total=total+(price*qty);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.btnUp.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int qty = Integer.parseInt(holder.textItemQty.getText()
.toString()) + 1;
holder.textOrderedItemPrice.setText("" + (price * qty));
holder.textItemQty.setText(String.valueOf(qty));
total=total+price;
Toast.makeText(activity,""+total, Toast.LENGTH_LONG).show();
}
});
holder.btnDown.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int qty = Integer.parseInt(holder.textItemQty.getText()
.toString());
if (qty > 1) {
qty -= 1;
holder.textOrderedItemPrice.setText("" + price * qty);
holder.textItemQty.setText("" + qty);
total=total-price;
Toast.makeText(activity,""+total, Toast.LENGTH_LONG).show();
}
}
});
holder.btnDeleteOrderedItem.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
orderedList.remove(deletePosition);
notifyDataSetChanged();
}
});
holder.textOrderedItem.setText(orderedList.get(position).toString());
return convertView;
}
}
我想要总计所有物品价格,但我的总数大于我的实际价格 例如:如果我有4个项目,它的价格是50,我总共得到250个而不是200个,并解释我如何自动调用getView()方法,从它调用的地方,谢谢
答案 0 :(得分:1)
不要将业务逻辑与演示结合起来。
每次绘制视图时都会调用 getView
。您无法控制它的调用,也不应该在模型中进行更改或在其中执行计算。
你可以创建一个单独的函数来循环项目并计算总数。
答案 1 :(得分:1)
不应该如何使用getView。只要需要为视图指定位置,ListView就会调用getView。它不会调用每个位置一次。它不承诺按顺序调用任何东西。您不应该在getView中进行任何依赖于任何其他位置的计算 - 您应该做的唯一事情就是为行设置UI。
答案 2 :(得分:0)
一旦调用 CustomOrderedItemAdapter 类,getview()方法将由类自动调用,每当ListView调用getView时,它需要为视图分配位置。所以你不需要调用方法名称getview()
答案 3 :(得分:0)
您正在将convert Total初始化为50。由于数量初始化为1且价格为50.所以总数为50。
现在,当您使用btnUp添加数量时。总数为50.它会被添加。将total初始化为0,它应该可以正常工作。
total=total+(price*qty); //50
convertView.setTag(holder);