Reputation: 161
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
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