Pfil Mintz
Pfil Mintz

Reputation: 161

increment counter which click of button in recyclerview

I am working on app that fetches data using volley and displays in feed using recyclerview.i have a button in each card that when clicked, will count the number of clicks and display it in a textview in that particular card. It works perfectly but when i scroll away from the card to another card and then scroll back to the previous card (ie. the card is reloaded,) the click count starts from zero upon clicking the button instead of continuing from the value that it had before reloading. What am I doing wrong? this is my code

package net.simplifiedcoding.myfeed;
import android.content.Context;
import android.media.Image;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ProgressBar;
import android.widget.TextView;

import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;

import org.w3c.dom.Text;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Belal on 11/9/2015.
 */

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {


    //Imageloader to load image
    private ImageLoader imageLoader;
    private Context context;

    //List to store all superheroes
    List<SuperHero> superHeroes;

    //Constructor of this class
    public CardAdapter(List<SuperHero> superHeroes, Context context){
        super();
        //Getting all superheroes
        this.superHeroes = superHeroes;
        this.context = context;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.superheroes_list, parent, false);
        ViewHolder viewHolder = new ViewHolder(v);
        return viewHolder;

    }



    @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {



        //Getting the particular item from the list
        SuperHero superHero =  superHeroes.get(position);

        //Loading image from url
        imageLoader = CustomVolleyRequest.getInstance(context).getImageLoader();
        imageLoader.get(superHero.getImageUrl(), ImageLoader.getImageListener(holder.imageView, R.drawable.image, android.R.drawable.ic_dialog_alert));

        //Showing data on the views
        holder.imageView.setImageUrl(superHero.getImageUrl(), imageLoader);
        holder.textViewName.setText(superHero.getName());
        holder.textViewPublisher.setText(superHero.getPublisher());
        holder.textViewLikes.setText(superHero.getLikes());
        //increment counter and display in textview when button is clicked
        holder.custom_button.setOnClickListener(new View.OnClickListener() {

            int count = 0 ;
            @Override
            public void onClick(View v) {
                count ++;
                holder.txtCount.setText(String.valueOf(count));

                }

            });
    }



    @Override
    public int getItemCount() {
        return superHeroes.size();
    }


    class ViewHolder extends RecyclerView.ViewHolder{
        //Views
        public NetworkImageView imageView;
        public TextView textViewName;
        public TextView textViewPublisher;
        public TextView textViewLikes;
        public TextView txtCount;
        public ImageButton custom_button;

        //Initializing Views
        public ViewHolder(View itemView) {
            super(itemView);
            imageView = (NetworkImageView) itemView.findViewById(R.id.imageViewHero);
            textViewName = (TextView) itemView.findViewById(R.id.textViewName);
            textViewPublisher = (TextView) itemView.findViewById(R.id.textViewPublisher);
            textViewLikes = (TextView) itemView.findViewById(R.id.textViewlikes);
            txtCount = (TextView)itemView.findViewById(R.id.txtCount);
            custom_button = (ImageButton) itemView.findViewById(R.id.custom_button);



        }


    }

}

Upvotes: 0

Views: 3041

Answers (1)

Deepak John
Deepak John

Reputation: 967

In android views are reused, you need to add a private variable count for superheroes set to zero and for each button click, increment count and display it

holder.custom_button.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View v) {
            superHero.get(position).setCount(superHero.get(position).getCount+1)
            holder.txtCount.setText(superHero.get(position).getCount());

            }

        });
holder.txtCount.setText(superHero.get(position).getCount());

Upvotes: 1

Related Questions