Home  >  Q&A  >  body text

android listview 每行的金额 求总和

我用listview 把一些数据通过simpleAdapter 展示出来。 详情如截图

加减 按钮是修改数量。 与此同时,右边的 和 也会随着数量的更改而 更新。

java代码 已经测试过。 目前加减和一切正常。

int cal_quantity;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main8);

    List<HashMap<String, String>> aList = new ArrayList<HashMap<String, String>>();

    final String name[]={"apple","orange","pear"};
    final String quantity[]={"1","2","3"};
    final String price[]={"5","10","2"};

    for(int i=0;i<name.length;i++){
        HashMap<String, String> map = new HashMap<>();
        map.put("name",name[i]);
        map.put("quantity",quantity[i]);
        map.put("price",price[i]);
        aList.add(map);
    }

    String[] from = {"name","quantity","price"};
    int[] to = {R.id.name,R.id.quantity,R.id.price};

    SimpleAdapter adapter = new SimpleAdapter(this, aList, R.layout.main7, from, to){
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {

            View v = super.getView(position, convertView, parent);
            final TextView tv_quantity=(TextView)v.findViewById(R.id.quantity);
            final TextView tv_price=(TextView)v.findViewById(R.id.price);
            final TextView tv_total=(TextView)v.findViewById(R.id.total);

            final int get_quantity = Integer.parseInt(tv_quantity.getText().toString());
            final double get_price= Double.parseDouble(tv_price.getText().toString());
            final double get_total=get_quantity*get_price;
            tv_total.setText(get_total+"");

            Button minus=(Button)v.findViewById(R.id.minus);
            minus.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    cal_quantity=Integer.parseInt(tv_quantity.getText().toString());
                    if(cal_quantity!=1){
                        cal_quantity=cal_quantity-1;
                    }
                    tv_quantity.setText(cal_quantity+"");
                    double get_total=cal_quantity*get_price;
                    tv_total.setText(get_total+"");
                }
            });

            Button plus=(Button)v.findViewById(R.id.plus);
            plus.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    cal_quantity=Integer.parseInt(tv_quantity.getText().toString());
                    cal_quantity=cal_quantity+1;
                    tv_quantity.setText(cal_quantity+"");
                    double get_total=cal_quantity*get_price;
                    tv_total.setText(get_total+"");
                }
            });
            return v;
        }
    };

    ListView listView = (ListView) findViewById(R.id.listview);
    listView.setAdapter(adapter);

}

xml - listview和底部的总和 textview分开

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main8"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.yu.singleton.Main8Activity"
android:orientation="vertical">

<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_weight="0.3"
    android:layout_height="match_parent">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listview" />
</LinearLayout>

<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:background="@android:color/holo_blue_dark"
    android:layout_weight="0.7"
    android:layout_height="match_parent">

    <TextView
        android:text="Total"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView3"
        android:textAlignment="center"
        android:textSize="36sp" />
</LinearLayout>
</LinearLayout>

**那么我的问题是如何把每一排最右边的 Textview 值 加起来 ,然后再底部展示出总和? 我知道大概是用循环,但是实际操作完全没有头绪。
请大神们指点**

PHP中文网PHP中文网2741 days ago456

reply all(4)I'll reply

  • 黄舟

    黄舟2017-04-17 17:51:42

    I will add to @mw2972’s answer.
    Because the total price is only related to the initial data and each operation, you can maintain a total price variable totalPrice in Activity, Then assign a value to it when initializing the list, and modify its value every time you click on the addition or subtraction operation, so that you can always know the total price of the current list.Activity中维护一个总价变量totalPrice, 然后初始化列表的时候给它赋值, 在每次点击加减操作的时候修改它的值就可以一直知道当前列表的总价了.

    初始化的时机: 什么时候你把列表数据赋值给adapter就什么时候遍历一次数据计算总价就行了.
    修改时机: 点击加减操作的时候修改, 同时更新总价TextView的显示内容就可以了.

    最后, 把Adapter放在Activity

    Timing of initialization: When you assign the list data to the adapter, just traverse the data once and calculate the total price. 🎜Timing of modification: Modify when clicking the addition and subtraction operation, and update the total price at the same time TextView Just display the content.🎜 🎜Finally, putting Adapter in Activity is actually a bad habit.🎜

    reply
    0
  • ringa_lee

    ringa_lee2017-04-17 17:51:42

    Use eventBus or RxBus

    reply
    0
  • ringa_lee

    ringa_lee2017-04-17 17:51:42

    It is best to separate data and display, and do not rely on text on the interface as a data source.
    Including clicking the add or subtract button, you should modify the value of the quantity array, and then update the interface

    The sum is the price x quantity of each row, then add it up, and then update the text below

    reply
    0
  • PHP中文网

    PHP中文网2017-04-17 17:51:42

    First, change the three arrays of quantity, price and name into Activity member variables to ensure that different views can access them.
    Then, modify each onClick method. Since you now have access to the quantities and unit prices of all items, the total price is not difficult to calculate.

    reply
    0
  • Cancelreply