我用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 值 加起来 ,然后再底部展示出总和? 我知道大概是用循环,但是实际操作完全没有头绪。
请大神们指点**
Saya akan menambah jawapan @mw2972
Oleh kerana jumlah harga hanya berkaitan dengan data awal dan setiap operasi, anda boleh mengekalkan jumlah pembolehubah harga
Activity
dalamtotalPrice
, dan kemudian memberikannya apabila memulakan. senarai Ia diberikan nilai dan anda sentiasa boleh mengetahui jumlah harga senarai semasa dengan mengubah suai nilainya setiap kali anda mengklik pada operasi tambah atau tolak.Masa permulaan: Apabila anda menetapkan data senarai kepada penyesuai, hanya melintasi data sekali dan mengira jumlah harga
Masa pengubahsuaian: Ubah suai apabila mengklik operasi tambah dan tolak, dan kemas kini jumlah harga pada. pada masa yang sama
TextView
Paparkan sahaja kandungannya.Akhir sekali, meletakkan
Adapter
dalamActivity
sebenarnya adalah tabiat buruk.Gunakan eventBus atau RxBus
Adalah yang terbaik untuk memisahkan data dan paparan, dan jangan bergantung pada teks pada antara muka sebagai sumber data.
Termasuk mengklik butang tambah dan tolak, anda harus mengubah suai nilai tatasusunan kuantiti, dan kemudian mengemas kini antara muka
Jumlah ialah harga x kuantiti setiap baris, kemudian tambahkannya, dan kemudian kemas kini teks di bawah
Pertama, tukar tiga tatasusunan kuantiti, harga dan nama menjadi pembolehubah ahli Aktiviti untuk memastikan paparan berbeza boleh mengaksesnya.
Kemudian, ubah suai setiap kaedah onClick. Memandangkan anda kini mempunyai akses kepada kuantiti dan harga unit semua item, jumlah harga tidak sukar untuk dikira.