if (Constants.sItem_Detail.size() > 0) { Double mGTotal = Double.parseDouble(Constants.sItem_Detail.get(0).get(com.example.sample.CartAdapter.KEY_TOTAL)); for (int i = 1; i < Constants.sItem_Detail.size(); i++) { mGTotal = mGTotal + Double.parseDouble(Constants.sItem_Detail.get(i).get(com.example.sample.CartAdapter.KEY_TOTAL)); } mGrandTotal = String.valueOf(new DecimalFormat("##.#").format(mGTotal)); mTxtVIEwGrandTotal.setText(mGrandTotal); myTextVeiwGrandTotal.setText(mGrandTotal);
特别是,虽然我使用这些行得到错误:
Double mGTotal = Double.parseDouble(Constants.sItem_Detail.get(0).get(com.example.sample.CartAdapter.KEY_TOTAL));mGTotal = mGTotal + Double.parseDouble(Constants.sItem_Detail.get(i).get(com.example.sample.CartAdapter.KEY_TOTAL));
我试过以下代码:
if (Constants.sItem_Detail.size() > 0) { Toast.makeText(getApplicationContext(),"Constants is Greater Than 0",Toast.LENGTH_LONG).show(); } else { Toast.makeText(getApplicationContext(),"Constants is Less Than < 0",Toast.LENGTH_LONG).show(); }
并且获取常量大于0,并且显示购物车中的商品数量为1
但每当我在我的代码中使用这一行获得问题时,它是从适配器到活动获取价值的正确方法吗?
Double.parseDouble(Constants.sItem_Detail.get(0).get(com.example.sample.CartAdapter.KEY_TOTAL));
实际上我正在计算Adapter类中每个项目的总金额,现在试图在Activity中显示所有总金额的总和为总计,但面对问题,告诉我我在哪里做错了?
这是完整的代码:
CartActivity.java:
protected voID onCreate(Bundle savedInstanceState) { // Todo auto-generated method stub super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_cart); mLstVIEw1 = (ListVIEw) findVIEwByID(R.ID.ListVIEw1); mTxtVIEwGrandTotal = (TextVIEw) findVIEwByID(R.ID.bill_amount); myTextVeiwGrandTotal =(TextVIEw) findVIEwByID(R.ID.mTxtVIEwGrandTotalValue); mItems = (TextVIEw) findVIEwByID(R.ID.total_items); mTax =(TextVIEw) findVIEwByID(R.ID.taxes); mDeliveryCharges =(TextVIEw) findVIEwByID(R.ID.delivery_charges); mdiscount =(TextVIEw) findVIEwByID(R.ID.discount); mPackaging =(TextVIEw) findVIEwByID(R.ID.packaging); if (Constants.sItem_Detail.size() > 0) { Double mGTotal = Double.parseDouble(Constants.sItem_Detail.get(0).get(com.example.sample.CartAdapter.KEY_TOTAL)); for (int i = 1; i < Constants.sItem_Detail.size(); i++) { mGTotal = mGTotal + Double.parseDouble(Constants.sItem_Detail.get(i).get(com.example.sample.CartAdapter.KEY_TOTAL)); } mGrandTotal = String.valueOf(new DecimalFormat("##.#").format(mGTotal)); mTxtVIEwGrandTotal.setText(mGrandTotal); myTextVeiwGrandTotal.setText(mGrandTotal); mTaxes = String.valueOf(mTax); mTax.setText("0"); mDelivery = String.valueOf(mDeliveryCharges); mDeliveryCharges.setText("0"); mTotal = String.valueOf(Constants.sItem_Detail.size()); mItems.setText(mTotal); } mVIEwCartAdpt = new CartAdapter(CartActivity.this); mLstVIEw1.setAdapter(mVIEwCartAdpt); mLstVIEw1.setonItemClickListener(new OnItemClickListener() { public voID onItemClick(AdapterVIEw<?> parent,VIEw v,final int position,long ID) { // } }); } // Called when the activity begins interacting with the user @OverrIDe protected voID onResume() { super.onResume(); mVIEwCartAdpt.notifyDataSetChanged(); } }
CartAdapter.java:
public class CartAdapter extends BaseAdapter { public static final String LOG_TAG = "CartAdapter"; public static final String KEY_Title = "Title"; public static final String KEY_COST = "cost"; public static final String KEY_QTY = "qty"; public static final String KEY_TOTAL = "total"; Activity activity; LayoutInflater inflater; Imagebutton mimgBtnDelete; ListVIEw ListVIEw; private double itemamount = 0; private int itemquantity = 0; public CartAdapter(Activity a) { // Todo auto-generated constructor stub activity = a; inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public int getCount() { // Todo auto-generated method stub return Constants.sItem_Detail.size(); } public Object getItem(int position) { // Todo auto-generated method stub return position; } public long getItemID(int position) { // Todo auto-generated method stub return position; } public VIEw getVIEw(final int position,VIEw convertVIEw,VIEwGroup parent) { // Todo auto-generated method stub VIEw vi = convertVIEw; if (convertVIEw == null) vi = inflater.inflate(R.layout.Listrow_cart,null); // Listrow_cart vi.setClickable(true); vi.setFocusable(true); vi.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { } }); mimgBtnDelete = (Imagebutton) vi .findVIEwByID(R.ID.mimgBtnDelete); mimgBtnDelete.setonClickListener(new OnClickListener() { public voID onClick(VIEw v) { // Todo auto-generated method stub Constants.sItem_Detail.remove(position); notifyDataSetChanged(); Intent mInVIEwCartRefresh = new Intent(activity,CartActivity.class); activity.startActivity(mInVIEwCartRefresh); activity.finish(); } }); final TextVIEw Title = (TextVIEw) vi.findVIEwByID(R.ID.Title); final EditText qty = (EditText) vi.findVIEwByID(R.ID.qty); final TextVIEw cost = (TextVIEw) vi.findVIEwByID(R.ID.cost); final TextVIEw total = (TextVIEw) vi.findVIEwByID(R.ID.total); HashMap<String,String> item = new HashMap<String,String>(); item = Constants.sItem_Detail.get(position); // Setting all values in ListvIEw Title.setText(item.get(com.example.sample.ItemsActivity.KEY_Title)); cost.setText(item.get(com.example.sample.ItemsActivity.KEY_COST)); qty.setText("1"); itemquantity = Integer.parseInt(qty.getText().toString()); itemamount = Double.parseDouble(cost.getText().toString()); total.setText(new DecimalFormat("##.#").format(itemamount*itemquantity)); qty.addTextChangedListener(new TextWatcher() { public voID onTextChanged(CharSequence s,int start,int before,int count) { // Todo auto-generated method stub if (!qty.getText().toString().equals("") || !qty.getText().toString().equals("")) { // accept quantity by user itemquantity = Integer.parseInt(qty.getText() .toString()); // changes in total amount as per change in qty (entered by user) total.setText(new DecimalFormat("##.#").format(itemamount*itemquantity)); } else { total.setText("0.00"); } } public voID beforeTextChanged(CharSequence s,int count,int after) { // Todo auto-generated method stub } public voID afterTextChanged(Editable s) { } }); return vi; } }
logcat的:
07-02 05:05:29.411: D/AndroIDRuntime(802): Shutting down VM07-02 05:05:29.420: W/dalvikvm(802): threadID=1: thread exiting with uncaught exception (group=0x40a71930)07-02 05:05:29.501: E/AndroIDRuntime(802): FATAL EXCEPTION: main07-02 05:05:29.501: E/AndroIDRuntime(802): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sample/com.example.sample.CartActivity}: java.lang.NullPointerException07-02 05:05:29.501: E/AndroIDRuntime(802): at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2180)07-02 05:05:29.501: E/AndroIDRuntime(802): at androID.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)07-02 05:05:29.501: E/AndroIDRuntime(802): at androID.app.ActivityThread.access0(ActivityThread.java:141)07-02 05:05:29.501: E/AndroIDRuntime(802): at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)07-02 05:05:29.501: E/AndroIDRuntime(802): at androID.os.Handler.dispatchMessage(Handler.java:99)07-02 05:05:29.501: E/AndroIDRuntime(802): at androID.os.Looper.loop(Looper.java:137)07-02 05:05:29.501: E/AndroIDRuntime(802): at androID.app.ActivityThread.main(ActivityThread.java:5041)07-02 05:05:29.501: E/AndroIDRuntime(802): at java.lang.reflect.Method.invokeNative(Native Method)07-02 05:05:29.501: E/AndroIDRuntime(802): at java.lang.reflect.Method.invoke(Method.java:511)07-02 05:05:29.501: E/AndroIDRuntime(802): at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)07-02 05:05:29.501: E/AndroIDRuntime(802): at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:560)07-02 05:05:29.501: E/AndroIDRuntime(802): at dalvik.system.NativeStart.main(Native Method)07-02 05:05:29.501: E/AndroIDRuntime(802): Caused by: java.lang.NullPointerException07-02 05:05:29.501: E/AndroIDRuntime(802): at java.lang.StringToReal.parseDouble(StringToReal.java:244)07-02 05:05:29.501: E/AndroIDRuntime(802): at java.lang.Double.parseDouble(Double.java:295)07-02 05:05:29.501: E/AndroIDRuntime(802): at com.example.sample.CartActivity.onCreate(CartActivity.java:54)07-02 05:05:29.501: E/AndroIDRuntime(802): at androID.app.Activity.performCreate(Activity.java:5104)07-02 05:05:29.501: E/AndroIDRuntime(802): at androID.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)07-02 05:05:29.501: E/AndroIDRuntime(802): at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2144)07-02 05:05:29.501: E/AndroIDRuntime(802): ... 11 more07-02 05:05:33.180: I/Process(802): Sending signal. PID: 802 SIG: 9解决方法 (1)有一种方法可以将值从Adapter传递给Activity,其中设置了适配器,
即我们写ListvIEw.setadapter(xyzadapter);在MainActivity中,我们希望将值从xyzadapter传递给MainActivity,然后只有我知道的一种方法,创建一个接口,用参数传递值定义一个方法,然后在适配器类上实现它,
(2)如果我们想将值从适配器传递给另一个未设置它的活动,那么我们可以使用putExtra方法传递值,
如果您有任何问题,请告诉我……
编辑:for(1)回答
在主包中创建一个界面:
public interface DataTransferInterface { public voID setValues(ArrayList<?> al);}
在您的适配器类中创建接口的对象:
公共类CartAdapter扩展BaseAdapter {
在构造函数之前:
DataTransferInterface dtInterface;
在您的构造中传递此接口
在CartAdapter中使用此构造函数:
public CartAdapter(Activity a,DataTransferInterface dtInterface) { // Todo auto-generated constructor stub activity = a; this.dtInterface = dtInterface; inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);}
并使用dtInterface.setValues(您的值传递给Activity)
现在在你的CartActivity.java中
实现该接口,如:
public class CartActivity extends Activity implements DataTransferInterface {
并改变
mVIEwCartAdpt = new CartAdapter(CartActivity.this);
至
mVIEwCartAdpt = new CartAdapter(CartActivity.this,this);
现在你会看到CartActivity下方的红线(只是将鼠标光标移到CartActivity上),显示添加未实现的方法,点击它会覆盖setValues方法
@OverrIDepublic voID setValues(ArrayList<?> al) { // Todo auto-generated method stub}
您可以使用任何类型的数据来代替ArrayList
如果您有任何问题,请告诉我:
总结以上是内存溢出为你收集整理的android – 如何将值从适配器传递给活动全部内容,希望文章能够帮你解决android – 如何将值从适配器传递给活动所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)