我用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 值 加起来 ,然后再底部展示出总和? 我知道大概是用循环,但是实际操作完全没有头绪。
请大神们指点**
Je vais ajouter à la réponse de @mw2972
Comme le prix total n'est lié qu'aux données initiales et à chaque opération, vous pouvez conserver une variable de prix total
Activity
danstotalPrice
, puis la donner lors de l'initialisation. la liste Une valeur lui est attribuée, et vous pouvez toujours connaître le prix total de la liste actuelle en modifiant sa valeur à chaque fois que vous cliquez sur l'opération d'addition ou de soustraction.Moment d'initialisation : lorsque vous attribuez les données de la liste à l'adaptateur, il suffit de parcourir les données une fois pour calculer le prix total.
Moment de modification : modifiez en cliquant sur l'opération d'addition et de soustraction, et mettez à jour le prix total. en même temps
TextView
Affichez simplement le contenu.Enfin, mettre
Adapter
dansActivity
est en fait une mauvaise habitude.Utilisez eventBus ou RxBus
Il est préférable de séparer les données et l'affichage, et de ne pas se fier au texte de l'interface comme source de données.
En cliquant sur les boutons d'ajout et de soustraction, vous devez modifier la valeur du tableau de quantités, puis mettre à jour l'interface
La somme est le prix x quantité de chaque ligne, puis additionnez-la, puis mettez à jour le texte ci-dessous
Tout d'abord, modifiez les trois tableaux de quantité, de prix et de nom en variables membres d'activité pour vous assurer que différentes vues peuvent y accéder.
Ensuite, modifiez chaque méthode onClick. Puisque vous avez désormais accès aux quantités et aux prix unitaires de tous les articles, le prix total n’est pas difficile à calculer.