2017-08-10 5 views
1

forループを繰り返し実行することによってリスト内の価格の合計を計算していますが、リスト内の合計も返します。あなたが理解していない場合、これは私のコードでリストをループする試みです。リストを反復処理した後に1つの合計を取得する

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つの項目があり、これはそれのために出力されます。

08-10 09:38:15.771 6285から6285/com.zack.tinga.applicationtest I /のSystem.out:23.98

08-10 09:38:価格をカウント15.790 6285から6285 /com.zack.tinga.applicationtest I/System.outには:価格をカウント:23.98

価格が正しいですが、問題は、それはリストのサイズを使用して合計を返すことです。リストを反復処理した後、ただ1つの合計を返すようにするにはどうすればよいですか。例えばリストのサイズが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()方法メソッドを呼び出してもスクロールしながらされていますリストビュー)。

は、したがって、あなたはコールcountCart(textViewPrice)どこかgetView()方法を得ました。

+0

ありがとう、私も今これを試してみます。 – Zack

関連する問題