我用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 值 加起来 ,然后再底部展示出总和? 我知道大概是用循环,但是实际操作完全没有头绪。
请大神们指点**
黄舟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
TextView
Just display the content.🎜
🎜Finally, putting Adapter
in Activity
is actually a bad habit.🎜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
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.