2017-08-10 72 views
1

我正在计算我的列表中的价格总和,通过循环访问for循环,但它也返回列表中的总数。如果你不明白,这是我的代码尝试循环遍历列表。迭代遍历列表后获取单个总和

public class CartAdapter extends ArrayAdapter<Cart> { 

private Activity context; 
private List<Cart> carts; 

public CartAdapter(@NonNull Activity context, ArrayList<Cart> carts) { 
    super(context, R.layout.cart_list_item, carts); 
    this.carts = carts; 
    this.context = context; 
} 

@NonNull 
@Override 
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 

    LayoutInflater inflater = context.getLayoutInflater(); 

    View cartViewItems = inflater.inflate(R.layout.cart_list_item, null, false); 

    TextView textViewName = cartViewItems.findViewById(R.id.cart_item); 
    TextView textViewPrice = cartViewItems.findViewById(R.id.cart_price); 
    ImageView imageViewCart = cartViewItems.findViewById(R.id.cart_img); 

    Cart cart = carts.get(position); 
    textViewName.setText(cart.getName()); 
    textViewPrice.setText(String.valueOf(cart.getPrice())); 
    Picasso.with(context).load(cart.getImg()).into(imageViewCart); 

    countCart(textViewPrice); 

    return cartViewItems; 
} 

public double countCart(TextView textViewPrice){ 
    double sum = 0.0; 
    for (int i = 0; i < carts.size(); i++) { 
     sum = sum + Double.parseDouble(textViewPrice.getText().toString()); 
    } 
    System.out.println("Count Price: " + sum); 

    return sum; 
} 

}

和我的清单此刻的大小有2项内,这是它的输出。

9月8日至10日:38:15.771 6285-6285/com.zack.tinga.applicationtest I/System.out的:计数价格:23.98

9月8日至10日:38:15.790 6285-6285 /com.zack.tinga.applicationtest I/System.out:Count价格:23.98

价格是正确的,但问题是它返回使用列表大小的总和。我怎样才能让它在遍历列表后返回一个单一的总和。例如如果列表的大小是15,那么它将在输出上打印总和15次,它应该只打印一次。

这是应用程序的屏幕截图:)

app screen shot

因此,它应该显示单个总,不则为list.size(;与目前一样。

+0

显示您的完整代码可能会调用2次 –

+0

这没有任何意义。你在哪里迭代列表?你没有向我们展示什么? –

+0

@DawoodibnKareem for循环用于迭代列表。 – Zack

回答

2

您可以尝试让boolean检查它是否已经打印。

首先声明一个变量在你的类:

private boolean isPrinted = false; 

然后在getView方法检查这样的:

if(!isPrinted) 
{ 
countCart(textViewPrice); 
isPrinted = true; 
} 

这将使这一说法只运行一次,并惯于根据运行列表的大小。

+0

哇,伙计,它的作品像魔术,非常感谢!经过长时间的痛苦之后,你才会帮助你。 – Zack

2

的问题是:

您所呼叫的方法countCart(textViewPrice)适配器的getView()方法被称为多次(等于行可见数在ListView的一个时间,也同时滚动列表显示)。

因此,你得电话countCart(textViewPrice)地方getView()方法。

+0

谢谢,我现在也试试。 – Zack