如何在Activity之前调用Adapter类

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作为价值TotalCartActivity内部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)

Swe*_*r ツ 3

您只需在 Adapter 中设置数组列表之前计算实体中的 Total 值,而不是在 Adapter 中计算它getView.

\n\n

代码片段:

\n\n
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);   \n
Run Code Online (Sandbox Code Playgroud)\n\n

希望它有帮助\xe3\x83\x84

\n