如何调用活动之前,适配器类 [英] How to Call Adapter class before Activity
问题描述
登录
说:
D / CartActivity-的onCreate(18171)的onCreate
D / CartActivity-TOTAL-InsideFORLOOP:(18171):0.0
D / CartActivity-onResume(18171):onResume
D / CartAdapter计:(18171):12.95
正如你可以看到上面的日志循环在CartActivity和CartActivity的 onResume()
方法执行后的第一次执行,< STRONG> CartAdapter 在执行这条线,因此对于我得到的 0.0 作为对总
在 CartActivity 在 For循环
原因是不是我在哪里增加数据的ArrayList,问题是 CartActivity 执行(我在哪里
获得价值总计)前< STRONG> CartAdapter 执行(我在哪里设定值总计
)
所以我必须做的,如果我的喜欢执行 CartActivity 的onCreate()
方法之前调用以下行
CartArrayList.cartArraylist.get(位置).setTotal(totalPrice);
CartActivity.java:
公共类CartActivity延伸活动{
.....
@覆盖
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
Log.d(CartActivity-的onCreate,的onCreate);
的setContentView(R.layout.activity_cart);
.......
适配器=新CartAdapter(getApplicationContext(),R.layout.adapter_cart,CartArrayList.cartArraylist);
对于(INT D = 0; D&LT; CartArrayList.cartArraylist.size(); d ++){
小计=小计+ CartArrayList.cartArraylist.get(D).getTotal();
Log.d(CartActivity-TOTAL-InsideFORLOOP:将String.valueOf(CartArrayList.cartArraylist.get(D).getTotal()));
}
listview.setAdapter(适配器);
adapter.notifyDataSetChanged();
textSubTotal.setText(decimalFormat.format(小计));
}
@覆盖
公共无效onResume(){
super.onResume();
Log.d(CartActivity-onResume,onResume);
}
}
CartAdapter.java:
公共类CartAdapter扩展了BaseAdapter {
.....
@覆盖
公共查看getView(最终诠释的立场,观点convertView,ViewGroup中父){
......
totalPrice = cart.getQuantity()* cart.getPrice();
CartArrayList.cartArraylist.get(位置).setTotal(totalPrice);
Log.d(CartAdapter计,将String.valueOf(CartArrayList.cartArraylist.get(位置).getTotal()));
.....
返回convertView;
}
}
您只有前设置数组列表中的适配器,而不是计算它 getView $ C来计算实体的总价值$ C>。
code片断:
的(INT D = 0; D&LT; CartArrayList.cartArraylist.size(); d ++){
//计算总价值
双totalPrice = CartArrayList.cartArraylist.get(D).getQuantity()* CartArrayList.cartArraylist.get(D).getPrice();
CartArrayList.cartArraylist.get(D).setTotal(totalPrice);
//设置为小计
小计=小计+ totalPrice;
}
适配器=新CartAdapter(getApplicationContext(),R.layout.adapter_cart,CartArrayList.cartArraylist);
listview.setAdapter(适配器);
希望它可以帮助ツ
Log
says:
D/CartActivity-onCreate(18171): onCreate
D/CartActivity-TOTAL-InsideFORLOOP:(18171): 0.0
D/CartActivity-onResume(18171): onResume
D/CartAdapter-TOTAL:(18171): 12.95
As you can see in above Log for loop is executed first in CartActivity and after the execution of onResume()
method of CartActivity, CartAdapter is executing this line, therefore for i am getting 0.0 as value of Total
in CartActivity inside For loop
The reason is not where i am adding to data ArrayList, issue is CartActivity executes (where i am getting value for Total
) before CartAdapter execution (where i am setting value for Total
)
So what I have to do, If I would like to call below line before execution of onCreate()
method of CartActivity
CartArrayList.cartArraylist.get(position).setTotal(totalPrice);
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");
}
}
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;
}
}
You have to calculate Total value in entity only before setting the array list in Adapter, rather than calculating it in getView
.
Code snippet :
for (int d=0; d<CartArrayList.cartArraylist.size(); d++) {
// calculate total value
Double totalPrice = CartArrayList.cartArraylist.get(d).getQuantity() * CartArrayList.cartArraylist.get(d).getPrice();
CartArrayList.cartArraylist.get(d).setTotal(totalPrice);
// set it for subTotal
subTotal = subTotal + totalPrice;
}
adapter = new CartAdapter(getApplicationContext(), R.layout.adapter_cart, CartArrayList.cartArraylist);
listview.setAdapter(adapter);
Hope it helps ツ
这篇关于如何调用活动之前,适配器类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!