Sun*_*Sun 5 android interface android-listview baseadapter android-activity
Log 说:
D/CartActivity-onCreate(18171): onCreate
D/CartActivity-TOTAL-InsideFORLOOP:(18171): 0.0
D/CartActivity-onResume(18171): onResume
D/CartAdapter-TOTAL:(18171): 12.95
Run Code Online (Sandbox Code Playgroud)
如你上述登录看到for循环在CartActivity和执行后首先执行onResume()CartActivity的方法,CartAdapter正在执行这条线,因此对于我得到0.0作为价值Total在CartActivity内部For loop
原因不在于我添加到数据ArrayList,问题是在CartAdapter执行(where i am getting value for Total)之前CartActivity执行(where i am setting value for Total)
所以我要做的是,如果我想在执行CartActivity方法之前调用下面的行onCreate()
CartArrayList.cartArraylist.get(position).setTotal(totalPrice);
Run Code Online (Sandbox Code Playgroud)
CartActivity.java:
public class CartActivity extends Activity {
.....
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("CartActivity-onCreate", "onCreate");
setContentView(R.layout.activity_cart);
.......
adapter = new CartAdapter(getApplicationContext(), R.layout.adapter_cart, CartArrayList.cartArraylist);
for (int d = 0; d < CartArrayList.cartArraylist.size(); d++) {
subTotal = subTotal + CartArrayList.cartArraylist.get(d).getTotal();
Log.d("CartActivity-TOTAL-InsideFORLOOP:", String.valueOf(CartArrayList.cartArraylist.get(d).getTotal()));
}
listview.setAdapter(adapter);
adapter.notifyDataSetChanged();
textSubTotal.setText(decimalFormat.format(subTotal));
}
@Override
public void onResume() {
super.onResume();
Log.d("CartActivity-onResume", "onResume");
}
}
Run Code Online (Sandbox Code Playgroud)
CartAdapter.java:
public class CartAdapter extends BaseAdapter {
.....
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
......
totalPrice = cart.getQuantity() * cart.getPrice();
CartArrayList.cartArraylist.get(position).setTotal(totalPrice);
Log.d("CartAdapter-TOTAL:", String.valueOf(CartArrayList.cartArraylist.get(position).getTotal()));
.....
return convertView;
}
}
Run Code Online (Sandbox Code Playgroud)
您只需在 Adapter 中设置数组列表之前计算实体中的 Total 值,而不是在 Adapter 中计算它getView.
for (int d=0; d<CartArrayList.cartArraylist.size(); d++) {\n // calculate total value\n\n Double totalPrice = CartArrayList.cartArraylist.get(d).getQuantity() * CartArrayList.cartArraylist.get(d).getPrice(); \n CartArrayList.cartArraylist.get(d).setTotal(totalPrice);\n\n // set it for subTotal \n subTotal = subTotal + totalPrice; \n}\n\nadapter = new CartAdapter(getApplicationContext(), R.layout.adapter_cart, CartArrayList.cartArraylist); \nlistview.setAdapter(adapter); \nRun Code Online (Sandbox Code Playgroud)\n\n希望它有帮助\xe3\x83\x84
\n