I have 3 Arrays for Name,Quantity and Price.
I use Listview to display them out with SimpleAdapter. On top of that, I have 2 buttons in each row which are used to control the Quantity - Plus and Minus Quantity.
When clicking on the Plus Or Minus button, the quantity will change and the sub-total of that row will be updated as well.
If quantity = 1, when clicking on the minus button, it will remain 1;
so far all the functions working correctly.
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
<?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>
My question is how to Add the sub-total of each Row and then display it in a Textview (Total) below the Listview
You should save the quantity to your data source whenever you plus or minus.
Here is the way to save the quantity to your data source and calculate total when minus, you should do the same for plus
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;
}
// Save the quantity to your datasource (aList)
aList.get(position).put("quantity", "" + cal_quantity);
// Calculate total
int total = 0;
Log.d("TAG", "start total = " +total);
for (int i = 0; i < aList.size(); i++) {
Log.d("TAG", "at "+i+ " quantity = " +aList.get(i).get("quantity"));
total += Integer.parseInt(aList.get(i).get("quantity")) * Integer.parseInt(aList.get(i).get("price"));
Log.d("TAG", "at "+i+ " total = " +total);
}
// Display total, currently I use Toast, you can display it into your TextView
Toast.makeText(getApplicationContext(), "Total " + total, Toast.LENGTH_SHORT).show();
...
}
});