我正在构建一个listview
动态设置的计算器。当它被构建(使用计算)时,onclickListener
为每个项目设置一个以删除该行。这一切都是通过 AdapterClass 完成的。我有包含所有信息的 MainClass。在这堂课中,它有我的项目总数。这个运行总计有一个类可以添加/减去/检索我的运行总计。运行总计(截至目前)仅在按下“计算”按钮时设置。当我删除一个项目(行/计算)时,我需要它来更新我在主类中的运行总计。请记住,onClick
用于删除项目的 是 my AdapterClass
,而不是 my MainClass
。如果您需要进一步的解释,请告诉我。
更好的解释
主要活动
//This is called in my CALCULATE on click, after all the calulations have been made. THE ONLY PLACE THAT THE RUNNING TOTAL GETS CHANGED
newList=new ArrayList<Calculations>();
Calculations info = new Calculations();
info.SetType("Slab figure "+figureCount);
info.SetFigure(width+"x"+length+"x"+depth);
info.SetFigureAmount(String.format("%.2f",CubicYd)+"");
newList.add(info);
currentTotal.add(CubicYd);
total.setText(String.format("Total: "+"%.2f",currentTotal.getRunningTotal())+" Cubic Yards");
if(newList!=null&&newList.size()>0)
{
newAdapter.notifyDataSetChanged();
newAdapter.add(newList.get(0));
i++;
}
newAdapter.notifyDataSetChanged();
运行总计
public class runningTotal {
double runningTotal = 0.0;
public double add(double newAmount) {
runningTotal = runningTotal + newAmount;
return runningTotal;
}
public double sub(double newAmount) {
runningTotal = runningTotal - newAmount;
return runningTotal;
}
public double getRunningTotal() {
return runningTotal;
}
public void setRunningTotal() {
runningTotal = 0.0;
}
}
列表适配器
public class CustomListAdapter extends ArrayAdapter<Calculations> {
runningTotal currentTotal = new runningTotal();
Calculations c = new Calculations();
private Context appContext = null;
private ArrayList<Calculations> items = null;
public CustomListAdapter(Context context, int textViewResourceId,
ArrayList<Calculations> items) {
super(context, textViewResourceId, items);
this.appContext = context;
this.items = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) appContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.list_item, null);
}
c = items.get(position);
if (c != null) {
//Set the calculations to the list view
TextView type = (TextView) v.findViewById(R.id.tvType);
TextView figure = (TextView) v.findViewById(R.id.tvFullFigure);
TextView amount = (TextView) v.findViewById(R.id.tvAmount);
RelativeLayout layout = (RelativeLayout) v.findViewById(R.id.list_item_id);
layout.setTag(position);
//set on click to the layout that deletes the line.
layout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String pos = view.getTag().toString();
int _position = Integer.parseInt(pos);
currentTotal.sub(Double.parseDouble(c.getFigureAmount()));
<----This is where I need to update the textView "total" in my mainAcitivity----->
items.remove(_position);
notifyDataSetChanged();
Toast.makeText(appContext, "The amount to be released is " + Double
.parseDouble(c.getFigureAmount()), Toast.LENGTH_LONG).show();
}
});
if (type != null) {
type.setText(c.getType());
}
if (figure != null) {
figure.setText(c.getFigure());
}
if (amount != null) {
amount.setText(c.getFigureAmount());
}
}
return v;
}
}
计算
private String type = "";
private String figure = "";
private String figureTotal = "";
public void SetType(String type){
this.type = type;
}
public String getType(){
return this.type;
}
public void SetFigure(String figure) {
this.figure = figure;
}
public String getFigure(){
return this.figure;
}
public void SetFigureAmount(String figureTotal){
this.figureTotal = figureTotal;
}
public String getFigureAmount(){
return this.figureTotal;
}
更新/这是我CustomListAdapter
的ViewHolder
初学者
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if(v == null) {
LayoutInflater vi = (LayoutInflater)appContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
holder = new ViewHolder();
holder.text = (TextView) v.findViewById(R.id.tvTotal);
v = vi.inflate(R.layout.list_item, null);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(currentTotal.getRunningTotal()+"");
c = items.get(position);
if (c != null){
//Set the calculations to the list view
TextView type = (TextView) v.findViewById(R.id.tvType);
TextView figure = (TextView) v.findViewById(R.id.tvFullFigure);
TextView amount = (TextView) v.findViewById(R.id.tvAmount);
RelativeLayout layout = (RelativeLayout) v.findViewById(R.id.list_item_id);
layout.setTag(position);
//set on click to the layout that deletes the line.
layout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String pos = view.getTag().toString();
int _position = Integer.parseInt(pos);
double newTotal;
double oldTotal;
oldTotal = Double.parseDouble(c.getFigureAmount());
newTotal = currentTotal.getRunningTotal() - oldTotal;
currentTotal.setRunningTotal(newTotal);
holder.text.setText("total after delete" );
items.remove(_position);
notifyDataSetChanged();
}
});
if(type!=null) {
type.setText(c.getType());
}
if(figure!=null){
figure.setText(c.getFigure());
}
if(amount !=null){
amount.setText(c.getFigureAmount());
}
}
return v;
}
static class ViewHolder{
TextView text;
}
}
我nullPointer
排队
holder.text = (TextView) v.findViewById(R.id.tvTotal);