2016-03-01 102 views
0

我使用listview來填充數據。一切都很好,直到滾動它。滾動所有文本視圖(COUNT)時將更改爲默認值。在這裏,我使用光標適配器來填充它。TextView的值在滾動列表視圖時發生變化

enter image description here

當我點擊^/落於下項值發生變化的項目箭頭

NEXT ERROR:

當我點擊REMOVE按鈕,而不是刪除我點擊的項目,其他項目從列表中刪除。

這裏是我的AdapterClass:

public class CartCursorAdapter extends CursorAdapter implements View.OnClickListener { 

    public static final String MyPREFERENCES = "Preference"; 
    public ViewHolder viewHolder; 
    DbUtil dbUtil; 
    LayoutInflater mInflater; 
    Context contextNew; 
    String MY_FRAGEMNT; 
    SharedPreferences pref; 
    String strItemName, strCategoryName, strPrice, strCartCount; 
    int price = 0; 
    String quantity; 
    int total; 
    String netA = "0"; 
    int sum = 0; 
    float netAmount; 
    int cartPrice, cartSum, cartCount; 

    public CartCursorAdapter(Context context, Cursor c, String MYFRAGMENT, boolean autoRequery) { 
     super(context, c, autoRequery); 
     mInflater = LayoutInflater.from(context); 
     contextNew = context; 
     MY_FRAGEMNT = MYFRAGMENT; 
     dbUtil = new DbUtil(context); 
     dbUtil.open(); 
     pref = context.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); 
     strItemName = pref.getString("itemName", null); 
     strCategoryName = pref.getString("categoryName", null); 
     strPrice = pref.getString("Price", null); 
     strCartCount = pref.getString("cartCount", null); 
    } 

    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 
     View v = mInflater.inflate(R.layout.cart_list_item, null); 
     return v; 
    } 

    @Override 
    public void bindView(View itemView, Context context, Cursor cursor) { 
     viewHolder = (ViewHolder) itemView.getTag(); 
     if (viewHolder == null) { 

      viewHolder = new ViewHolder(); 
      viewHolder.cartProduct = (TextView) itemView.findViewById(R.id.cartProduct); 
      viewHolder.cartQuantity = (TextView) itemView.findViewById(R.id.cartQuantity); 
      viewHolder.cartPrice = (TextView) itemView.findViewById(R.id.cartPrice); 
      viewHolder.cartPriceDum = (TextView) itemView.findViewById(R.id.cartPriceDum); 
      viewHolder.cartCount = (TextView) itemView.findViewById(R.id.cartCount); 
      viewHolder.ivDecrease = (ImageView) itemView.findViewById(R.id.ivDecrease); 
      viewHolder.ivIncrease = (ImageView) itemView.findViewById(R.id.ivIncrease); 
      viewHolder.addTowish = (Button) itemView.findViewById(R.id.addTowish); 
      viewHolder.remove = (Button) itemView.findViewById(R.id.remove); 
      viewHolder.cardView = (CardView) itemView.findViewById(R.id.cardlist_item); 
      viewHolder.ivDecrease.setOnClickListener(this); 
      viewHolder.ivIncrease.setOnClickListener(this); 
      viewHolder.addTowish.setOnClickListener(this); 
      viewHolder.remove.setOnClickListener(this); 
      itemView.setTag(viewHolder); 

     } 

     if (MY_FRAGEMNT == "CheckOutFragment") { 
      viewHolder.addTowish = (Button) itemView.findViewById(R.id.addTowish); 
      viewHolder.remove = (Button) itemView.findViewById(R.id.remove); 
      viewHolder.addTowish.setVisibility(View.GONE); 
      viewHolder.remove.setVisibility(View.GONE); 
      viewHolder.cardView.setCardElevation(0); 
      LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams 
        (LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
      viewHolder.cardView.setLayoutParams(layoutParams); 
      itemView.setTag(viewHolder); 
     } 

     String pdtName = cursor.getString(cursor.getColumnIndex(DbHelper.CART_PDT_NAME)); 
     String catName = cursor.getString(cursor.getColumnIndex(DbHelper.CART_CAT_NAME)); 
     int cartprice = cursor.getInt(cursor.getColumnIndex(DbHelper.CART_PRICE)); 
     int strquantity = cursor.getInt(cursor.getColumnIndex(DbHelper.CART_QUANTITY)); 
     viewHolder.cartProduct.setText(pdtName); 
     viewHolder.cartPrice.setText(String.valueOf(cartprice)); 
     viewHolder.cartQuantity.setText(catName); 
     viewHolder.cartCount.setText(String.valueOf(strquantity)); 
    } 

    @Override 
    public void onClick(View view) { 
     switch (view.getId()) { 
      case R.id.remove: 
       dbUtil.open(); 
       String delItem = viewHolder.cartProduct.getText().toString(); 
       Cursor Cartcursor = dbUtil.getCartID(delItem); 
       if (Cartcursor != null && Cartcursor.moveToFirst()) { 
        Cartcursor.moveToFirst(); 
        String strCartProductID = Cartcursor.getString(Cartcursor.getColumnIndex(DbHelper.CART_PDT_ID)); 
        dbUtil.deleteCart(strCartProductID, delItem); 
        Toast.makeText(contextNew, "Cart Item " + "RowId" + strCartProductID + " Product Id" + delItem, Toast.LENGTH_SHORT).show(); 
        Toast.makeText(contextNew, "Deleted Successfully", Toast.LENGTH_SHORT).show(); 
       } 
       break; 

      case R.id.addTowish: 
       break; 
      case R.id.ivIncrease: 
       increase(); 
       break; 
      case R.id.ivDecrease: 
       decrease(); 
       break; 

     } 
    } 

    private void decrease() { 
     strPrice = viewHolder.cartPrice.getText().toString(); 
     price = Integer.parseInt(strPrice); 
     int counter = 0; 
     try { 
      counter = Integer.parseInt(viewHolder.cartProduct.getText().toString()); 
     } catch (NumberFormatException e) { 
      e.printStackTrace(); 
     } 
     counter--; 

     if (counter > 0) { 
      viewHolder.cartProduct.setText(Integer.toString(counter)); 
      viewHolder.cartPrice.setVisibility(View.GONE); 
      viewHolder.cartPriceDum.setVisibility(View.VISIBLE); 
      quantity = viewHolder.cartProduct.getText().toString(); 
      total = (Integer.parseInt(quantity)) * (price); 
      netA = String.valueOf(total); 
      sum -= price; 
      netAmount = sum; 

      viewHolder.cartPriceDum.setText(String.valueOf(total)); 
      cartCount = Integer.parseInt(quantity); 
      //       Toast.makeText(context, "netAmount" + netAmount + "\n" + "Total" + total, Toast.LENGTH_SHORT).show(); 
      if (counter == 1) { 
       cartPrice = price; 
       cartSum = sum; 
      } 

      if (counter == 0) { 
       cartPrice = 0; 
       cartSum = 0; 
       cartCount = 0; 
//    Toast.makeText(context, "Minimum Item is 1", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 

    private void increase() { 
     strPrice = viewHolder.cartPrice.getText().toString(); 
     price = Integer.parseInt(strPrice); 
     int counter = 0; 
     try { 
      counter = Integer.parseInt(viewHolder.cartCount.getText().toString()); 
     } catch (NumberFormatException e) { 
      e.printStackTrace(); 
     } 
     counter++; 

     if (counter > 0) { 
      viewHolder.cartCount.setText(Integer.toString(counter)); 
      viewHolder.cartPrice.setVisibility(View.GONE); 
      viewHolder.cartPriceDum.setVisibility(View.VISIBLE); 
      quantity = viewHolder.cartCount.getText().toString(); 

      total = (Integer.parseInt(quantity)) * (price); 
      netA = String.valueOf(total); 
      sum += price; 
      netAmount = sum; 

      viewHolder.cartPriceDum.setText(String.valueOf(total)); 
      cartCount = Integer.parseInt(quantity); 
      //       Toast.makeText(context, "netAmount" + netAmount + "\n" + "Total" + total, Toast.LENGTH_SHORT).show(); 
      if (counter == 1) { 
       cartPrice = price; 
       cartSum = sum; 
      } 

      if (counter == 0) { 
       cartPrice = 0; 
       cartSum = 0; 
       cartCount = 0; 
      } 
     } 
    } 

    public static class ViewHolder { 
     public static Button addTowish, remove; 
     public TextView cartProduct, cartQuantity, cartPrice, cartCount, cartPriceDum; 
     public ImageView ivDecrease, ivIncrease; 
     CardView cardView; 
    } 
} 
+0

我已經將所有值存儲到'List '幫助我來修復我的錯誤。 –

回答

0

對於REMOVE: 創建自定義OnClickListener這需要cartProduct作爲參數

public class CustomOnClick implements OnClickListener { 
    String product; 


    public CustomOnClick(String product) { 
     super(); 
     this.product = product; 
    } 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     dbUtil.open(); 
      String delItem = product; //set product to delItem 
      Cursor Cartcursor = dbUtil.getCartID(delItem); 
      if (Cartcursor != null && Cartcursor.moveToFirst()) { 
       Cartcursor.moveToFirst(); 
       String strCartProductID = Cartcursor.getString(Cartcursor.getColumnIndex(DbHelper.CART_PDT_ID)); 
       dbUtil.deleteCart(strCartProductID, delItem); 
       Toast.makeText(contextNew, "Cart Item " + "RowId" + strCartProductID + " Product Id" + delItem, Toast.LENGTH_SHORT).show(); 
       Toast.makeText(contextNew, "Deleted Successfully", Toast.LENGTH_SHORT).show(); 
      } 
    } 
} 

然後同時設定onclicklistener刪除按鈕,你可以嘗試

viewHolder.remove.setOnClickListener(new CustomOnClick(cursor.getString(cursor.getColumnIndex(DbHelper.CART_PDT_NAME)))); 

並用於存儲COUN T值,當你加載列表視圖在HashMap中添加值(它存儲產品名稱和計數對它)後,每當你增加或減少COUNT只是更新其在散列表中的值