Chaitanya Parashar
Chaitanya Parashar

Reputation: 742

How to update textview in recycler view on button click?

I want to make a like button for my list items whenever i click the like button then the textview should update dynamically.but when i click the button only the last row gets updated and the rest does not change.Please guide me to accomplish this task of making like button in listitems.(I have used likebutton library for like button).

RecyclerViewAdapter.java

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

private static final String TAG = "hh";
private String[] names;
private String[] desc;
private Integer[] imageid;
private Context context1;
ImageButton sare;
public ImageView img;
LikeButton likeButton;
TextView tx1;
TextView tx2;
TextView tx3;
TextView tx4;
public RecyclerViewAdapter(Context context2,String[] names,String[] desc,Integer[] imageid){
    this.names = names;
    this.desc = desc;
    this.imageid = imageid;
    context1 = context2;
}

public class ViewHolder extends RecyclerView.ViewHolder{

    public LikeButton likeButton;

    public ViewHolder(View v){

        super(v);


    }
}

@Override
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){

    View view1 = LayoutInflater.from(context1).inflate(R.layout.recycler_view_items,parent,false);

    ViewHolder viewHolder1 = new ViewHolder(view1);
    img = (ImageView) view1.findViewById(R.id.imgview1);
    likeButton = (LikeButton) view1.findViewById(R.id.cvcv);
    tx3 = (TextView)view1.findViewById(R.id.counttxt);
    likeButton.setOnLikeListener(new OnLikeListener() {
        @Override
        public void liked(LikeButton likeButton) {

            int count = Integer.parseInt(tx3.getText().toString());
            Log.d("fgfgfgfgf", String.valueOf(count));
            tx3.setText(String.valueOf(++count));
            //tx3.setText(String.valueOf(Homefragment.countt));
        }
        @Override
        public void unLiked(LikeButton likeButton) {

        }
    });
    return viewHolder1;
}

@Override
public void onBindViewHolder(ViewHolder Vholder,final int position){
    if(imageid[position] != null) {
       // img.setImageBitmap(imageid[position]);
    }
    else{
    }
    img.setImageResource(imageid[position]);
    tx1.setText(names[position]);

    Vholder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        }
    });

}



@Override
public int getItemViewType(int position) {
    return position;
}

@Override
public int getItemCount(){

    return desc.length;
}

}

recycler_view_items.xml

<ConstraintLayout>
............
<LikeButton>
....
</LikeButton>
<TextView>
....
</TextView>   
</ConstraintLayout>

Upvotes: 0

Views: 751

Answers (2)

Tushar Pingale
Tushar Pingale

Reputation: 337

public class ViewHolder extends RecyclerView.ViewHolder{

    LikeButton likeButton;
    TextView tx1;
    TextView tx2;
    TextView tx3;
    TextView tx4;

    public ViewHolder(View v){
    super(v);
    img = (ImageView) v.findViewById(R.id.imgview1);
    likeButton = (LikeButton) v.findViewById(R.id.cvcv);
    tx3 = (TextView)v.findViewById(R.id.counttxt);



    }
}

Change your OnCreateviewHolder to :-

@Override
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){

    View view1 = LayoutInflater.from(context1).inflate(R.layout.recycler_view_items,parent,false);
    return new ViewHolder(view1);
}

OnBindViewHolder to :-

@Override
public void onBindViewHolder(ViewHolder Vholder,final int position){
    Vholder.img.setImageResource(imageid[position]);
    Vholder.tx1.setText(names[position]);

    Vholder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        }
    });
    Vholder.likeButton.setOnLikeListener(new OnLikeListener() {
    @Override
    public void liked(LikeButton likeButton) {

        //Logic
    }
    @Override
    public void unLiked(LikeButton likeButton) {

    }
    });
    }

Upvotes: 1

Benkerroum Mohamed
Benkerroum Mohamed

Reputation: 1936

Replace

tx3 = (TextView)view1.findViewById(R.id.counttxt);

with

TextView tx3 = (TextView)view1.findViewById(R.id.counttxt);

and

likeButton = (LikeButton) view1.findViewById(R.id.cvcv);

with

LikeButton likeButton = (LikeButton) view1.findViewById(R.id.cvcv);

In your code you are using the same instance of tx3 and likebutton, and it saves the last value, hope this helps

Upvotes: 1

Related Questions