如何调用活动之前,适配器类 [英] How to Call Adapter class before Activity

查看:129
本文介绍了如何调用活动之前,适配器类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

登录说:

  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

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆