Reputation: 47
I have two button increase and decrease and one textview. When I click on increase button the value in the textview is increases and vice versa but when I scroll the listview its get its default value 0. How can I resolve this?
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.cart_item, parent, false);
viewHolder = new ViewHolder();
viewHolder.mImgItem = (ImageView) convertView.findViewById(R.id.cart_image);
viewHolder.mTvItemName = (TextView) convertView.findViewById(R.id.tv_item_name);
viewHolder.mTvItemPrice = (TextView) convertView.findViewById(R.id.tv_item_price);
viewHolder.mTvNumber = (TextView) convertView.findViewById(R.id.tv_number);
viewHolder.mBtnAdd = (Button) convertView.findViewById(R.id.btn_add);
viewHolder.mBtnMinus = (Button) convertView.findViewById(R.id.btn_sub);
viewHolder.mImgDelete = (ImageView) convertView.findViewById(R.id.img_del);
viewHolder.mUniqueKey = String.valueOf(position);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.mBtnAdd.setTag(viewHolder);
viewHolder.mBtnMinus.setTag(viewHolder);
viewHolder.mTvNumber.setText("0");
viewHolder.mBtnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ViewHolder tagHolder = (ViewHolder) v.getTag();
int mValue = Integer.parseInt(tagHolder.mTvNumber.getText().toString().trim());
mValue++;
tagHolder.mTvNumber.setText("" + mValue);
});
viewHolder.mBtnMinus.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
ViewHolder tagHolder = (ViewHolder) v.getTag();
int mValue = Integer.parseInt(tagHolder.mTvNumber.getText().toString());
if (mValue > 0) {
mValue--;
tagHolder.mTvNumber.setText("" + mValue);
}
});
convertView.setTag(viewHolder);
PojoCart pojoCart = (PojoCart) getItem(position);
viewHolder.mTvItemName.setText(pojoCart.getmItemName());
viewHolder.mTvItemPrice.setText(pojoCart.getmItemPrice());
return convertView;
}
Upvotes: 0
Views: 73
Reputation: 3031
You need to store the number in each list item for example use this function to change the value of the list item's number:
List<Integer> mList = new ArrayList<>(LIST_SIZE);
int changeNumber(int position, int value){
mList.get(position) += value;
return mList.get(position);
}
u can use this function like:
viewHolder.mBtnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ViewHolder tagHolder = (ViewHolder) v.getTag();
int mValue = Integer.parseInt(tagHolder.mTvNumber.getText().toString().trim());
tagHolder.mTvNumber.setText("" + changeNumber(position,1);
});
viewHolder.mBtnMinus.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
ViewHolder tagHolder = (ViewHolder) v.getTag();
int mValue = Integer.parseInt(tagHolder.mTvNumber.getText().toString());
if (mValue > 0) {
tagHolder.mTvNumber.setText("" + changeNumber(position,-1);
}
});
Upvotes: 0
Reputation: 638
Save the value to PojoCart class and retrieve value from it every time just as you are getting itemName and itemPrice. So create an integer quantity in PojoCart class and in the adapter's getView method :
PojoCart pojoCart = (PojoCart) getItem(position);
viewHolder.mBtnAdd.setTag(pojoCart);
viewHolder.mBtnMinus.setTag(pojoCart);
if(pojoCart.getQuantity() > 0)
{
viewHolder.mTvNumber.setText(""+pojoCart.getQuantity());
}
else
{
viewHolder.mTvNumber.setText(""+0);
}
viewHolder.mBtnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PojoCart pojoCart = (PojoCart) v.getTag();
int mValue = pojoCart.getQuantity();
mValue++;
tagHolder.mTvNumber.setText("" + mValue);
pojoCart.setQuantity(mValue)
notifyDataSetChanged();
};
Upvotes: 1
Reputation: 2117
Use adapter.notifyDataSetChanged()
to update values in listview when data changes
Upvotes: 0
Reputation: 695
You have to save value of textview. As listview recreate views on scroll it takes default Just take model class and save values by position
Upvotes: 0