TextView's value changed while scrolling listview

只谈情不闲聊 提交于 2019-12-11 17:38:03

问题


I am using listview to populate data.Everything is fine until scroll it. While scrolling all the textview (COUNT) is changed to default value. Here I am using Cursor adapter to populate it.

When I clicked ^ / Down arrow in a item the next items value is changed.

NEXT ERROR:

When I click REMOVE Button, instead of remove the item which I clicked,other item is removed from the list.

Here is my 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;
    }
}

回答1:


For REMOVE : Create custom OnClickListener which takes cartProduct as its parameter

 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();
            }
    }
}

then while setting onclicklistener to remove button you can try

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

And for storing COUNT values when you loading listview add value in HashMap (which stores product name and count against it), after whenever you increase or decrease COUNT just update its value in hashmap



来源:https://stackoverflow.com/questions/35722771/textviews-value-changed-while-scrolling-listview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!