Search code examples
androidadapter

Adapter class notifydatachange not working


I want to change the visibloity of the button from like to unlike and unlike to like and if button pressed api will be call but its only change once

package com.vipulashishsanket.vadakvadan.Adapter;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.squareup.picasso.Picasso;
import com.vipulashishsanket.vadakvadan.EndPoints;
import com.vipulashishsanket.vadakvadan.R;
import com.vipulashishsanket.vadakvadan.SharedPrefManager;
import com.vipulashishsanket.vadakvadan.VideoPlayingActivity;
import com.vipulashishsanket.vadakvadan.fetchingClass.LikesId;
import com.vipulashishsanket.vadakvadan.fetchingClass.ThumbnailFetching;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import org.json.JSONException;
import org.json.JSONObject;

import de.hdodenhof.circleimageview.CircleImageView;

public class ThumbnailFetchingAdapter extends RecyclerView.Adapter<ThumbnailFetchingAdapter.ViewHolder>

{

    private Context mcontext;
    private List<ThumbnailFetching> mThumbnailFetchings;



    public ThumbnailFetchingAdapter(Context mcontext, List<ThumbnailFetching> mThumbnailFetchings)
    {
        this.mcontext=mcontext;
        this.mThumbnailFetchings=mThumbnailFetchings;

    }


    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(mcontext).inflate(R.layout.card_feeds,parent,false);

        return new ThumbnailFetchingAdapter.ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final ViewHolder holder, int position )
    {
        final ThumbnailFetching mthumbnailFetchings=mThumbnailFetchings.get(position);



        final String userid=mthumbnailFetchings.getUserid();
        final String postid=mthumbnailFetchings.getPostid();

        holder.like.setText(mthumbnailFetchings.getTotallikes());
        holder.comments.setText(mthumbnailFetchings.getTotalcomments());
        holder.grpname.setText(mthumbnailFetchings.getPartyname());
        holder.title.setText(mthumbnailFetchings.getTitle());
        if(mthumbnailFetchings.getImgurl().equals(""))
        {
            holder.thumbnail.setImageResource(R.drawable.grpprofilepic_icon);
        }
        else
        {
            Picasso.with(mcontext).load(mthumbnailFetchings.getImgurl()).into(holder.profilepic);

        }

            Picasso.with(mcontext).load(mthumbnailFetchings.getThumbnailsurl()).into(holder.thumbnail);


        holder.thumbnail.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(mcontext, VideoPlayingActivity.class);
                intent.putExtra("uid",userid);
                intent.putExtra("postid",postid);
                intent.putExtra("videourl",mthumbnailFetchings.getVideourl());
                mcontext.startActivity(intent);
            }
        });

        final String userId= SharedPrefManager.getInstance(mcontext).getUid();
        final String likeid=mthumbnailFetchings.getLikeId();


        if(likeid.equals("1"))
        {

            holder.unlike.setVisibility(View.VISIBLE);
            holder.feedlike.setVisibility(View.GONE);
            holder.unlike.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v)
                {

                        holder.feedlike.setVisibility(View.VISIBLE);
                        holder.unlike.setVisibility(View.GONE);

                        String count=holder.like.getText().toString();
                        int c=Integer.parseInt(count)-1;
                        String check=String.valueOf(c);
                        holder.like.setText(check);
                        like(userId, postid,"0");


                }

            });
        }
        else if(likeid.equals("0"))
        {
            holder.unlike.setVisibility(View.GONE);
            holder.feedlike.setVisibility(View.VISIBLE);

            holder.feedlike.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v)
                {

                        holder.unlike.setVisibility(View.VISIBLE);
                        holder.feedlike.setVisibility(View.GONE);

                        String count=holder.like.getText().toString();
                        int c=Integer.parseInt(count)+1;
                        String check=String.valueOf(c);
                        holder.like.setText(check);
                        like(userId, postid,"1");

              //      notifyItemChanged(holder.getAdapterPosition());



                }
            });
        }
        else
        {

        }






    }

    public void like(final String userid, final String postid,final String likeid)
    {
        StringRequest request=new StringRequest(Request.Method.POST,
                EndPoints.LikeUnlike,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response)
                    {

                        try
                        {
                            JSONObject object=new JSONObject(response);
                            Toast.makeText(mcontext,object.getString("message"),Toast.LENGTH_SHORT).show();
                        }
                        catch (JSONException e)
                        {
                            e.printStackTrace();
                        }

                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String,String> map=new HashMap<>();
                map.put("liked",likeid);
                map.put("post_id",postid);
                map.put("user_id",userid);

                return map;
            }
        };

        RequestQueue requestQueue= Volley.newRequestQueue(mcontext);
        requestQueue.add(request);
    }






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

    public class ViewHolder extends RecyclerView.ViewHolder {

        //public RelativeLayout std_id;

        CircleImageView profilepic;
        TextView grpname,loaction,feedtime,like,comments,title;
        ImageView thumbnail,feedlike,unlike;

        public ViewHolder(View itemView) {
            super(itemView);

            profilepic=itemView.findViewById(R.id.grpProfilepic);
            grpname=itemView.findViewById(R.id.grp_name);
            loaction=itemView.findViewById(R.id.grp_loaction);
            feedtime=itemView.findViewById(R.id.feed_time);
            like=itemView.findViewById(R.id.feeds_like_count);
            comments=itemView.findViewById(R.id.feeds_comments_count);
            thumbnail=itemView.findViewById(R.id.feeds_thumbnails);
            title=itemView.findViewById(R.id.feed_title);
            feedlike=itemView.findViewById(R.id.feeds_like);
            unlike=itemView.findViewById(R.id.feeds_unlike);
        }
    }



}

notifyitemchange is also not working I want to change the visibloity of the button from like to unlike and unlike to like and if button pressed api will be call but its only change once


Solution

  • Change from

    mThumbnailFetchings.get(position). like(userId, postid,"0"); to

    like(userId, postid,"0",getAdapterPosition());
    

    and in like() hold the adapter position and notifyItemChanges

    public class ThumbnailFetchingAdapter extends RecyclerView.Adapter<ThumbnailFetchingAdapter.ViewHolder>
    
    {
    
        private Context mcontext;
        private List<ThumbnailFetching> mThumbnailFetchings;
    
    
    
        public ThumbnailFetchingAdapter(Context mcontext, List<ThumbnailFetching> mThumbnailFetchings)
        {
            this.mcontext=mcontext;
            this.mThumbnailFetchings=mThumbnailFetchings;
    
        }
    
    
        @NonNull
        @Override
        public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view= LayoutInflater.from(mcontext).inflate(R.layout.card_feeds,parent,false);
    
            return new ThumbnailFetchingAdapter.ViewHolder(view);
        }
    
        @Override
        public void onBindViewHolder(@NonNull final ViewHolder holder, int position )
        {
            final ThumbnailFetching mthumbnailFetchings=mThumbnailFetchings.get(position);
    
    
    
            final String userid=mthumbnailFetchings.getUserid();
            final String postid=mthumbnailFetchings.getPostid();
    
            holder.like.setText(mthumbnailFetchings.getTotallikes());
            holder.comments.setText(mthumbnailFetchings.getTotalcomments());
            holder.grpname.setText(mthumbnailFetchings.getPartyname());
            holder.title.setText(mthumbnailFetchings.getTitle());
            if(mthumbnailFetchings.getImgurl().equals(""))
            {
                holder.thumbnail.setImageResource(R.drawable.grpprofilepic_icon);
            }
            else
            {
                Picasso.with(mcontext).load(mthumbnailFetchings.getImgurl()).into(holder.profilepic);
    
            }
    
                Picasso.with(mcontext).load(mthumbnailFetchings.getThumbnailsurl()).into(holder.thumbnail);
    
    
            holder.thumbnail.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent=new Intent(mcontext, VideoPlayingActivity.class);
                    intent.putExtra("uid",userid);
                    intent.putExtra("postid",postid);
                    intent.putExtra("videourl",mthumbnailFetchings.getVideourl());
                    mcontext.startActivity(intent);
                }
            });
    
            final String userId= SharedPrefManager.getInstance(mcontext).getUid();
            final String likeid=mthumbnailFetchings.getLikeId();
    
    
            if(likeid.equals("1"))
            {
    
                holder.unlike.setVisibility(View.VISIBLE);
                holder.feedlike.setVisibility(View.GONE);
                holder.unlike.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v)
                    {
    
                            holder.feedlike.setVisibility(View.VISIBLE);
                            holder.unlike.setVisibility(View.GONE);
    
                            String count=holder.like.getText().toString();
                            int c=Integer.parseInt(count)-1;
                            String check=String.valueOf(c);
                            holder.like.setText(check);
    mthumbnailFetchings.setLikeId("0");
                            like(userId, postid,"0",position);
    
    
                    }
    
                });
            }
            else if(likeid.equals("0"))
            {
                holder.unlike.setVisibility(View.GONE);
                holder.feedlike.setVisibility(View.VISIBLE);
    
                holder.feedlike.setOnClickListener(new View.OnClickListener()
                {
                    @Override
                    public void onClick(View v)
                    {
    
                            holder.unlike.setVisibility(View.VISIBLE);
                            holder.feedlike.setVisibility(View.GONE);
    
                            String count=holder.like.getText().toString();
                            int c=Integer.parseInt(count)+1;
                            String check=String.valueOf(c);
                            holder.like.setText(check);
    mthumbnailFetchings.setLikeId("1");
                            like(userId, postid,"1",position);
    
                  //      notifyItemChanged(holder.getAdapterPosition());
    
    
    
                    }
                });
            }
            else
            {
    
            }
    
    
    
    
    
    
        }
    
        public void like(final String userid, final String postid,final String likeid,int position)
        {
            StringRequest request=new StringRequest(Request.Method.POST,
                    EndPoints.LikeUnlike,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response)
                        {
    
                            try
                            {  ThumbnailFetchingAdapter.this.notifyItemChange(position);
                                JSONObject object=new JSONObject(response);
                                Toast.makeText(mcontext,object.getString("message"),Toast.LENGTH_SHORT).show();
                            }
                            catch (JSONException e)
                            {
                                e.printStackTrace();
                            }
    
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
    
                }
            }){
                @Override
                protected Map<String, String> getParams() throws AuthFailureError {
                    Map<String,String> map=new HashMap<>();
                    map.put("liked",likeid);
                    map.put("post_id",postid);
                    map.put("user_id",userid);
    
                    return map;
                }
            };
    
            RequestQueue requestQueue= Volley.newRequestQueue(mcontext);
            requestQueue.add(request);
        }
    
    
    
    
    
    
        @Override
        public int getItemCount() {
            return mThumbnailFetchings.size();
        }
    
        public class ViewHolder extends RecyclerView.ViewHolder {
    
            //public RelativeLayout std_id;
    
            CircleImageView profilepic;
            TextView grpname,loaction,feedtime,like,comments,title;
            ImageView thumbnail,feedlike,unlike;
    
            public ViewHolder(View itemView) {
                super(itemView);
    
                profilepic=itemView.findViewById(R.id.grpProfilepic);
                grpname=itemView.findViewById(R.id.grp_name);
                loaction=itemView.findViewById(R.id.grp_loaction);
                feedtime=itemView.findViewById(R.id.feed_time);
                like=itemView.findViewById(R.id.feeds_like_count);
                comments=itemView.findViewById(R.id.feeds_comments_count);
                thumbnail=itemView.findViewById(R.id.feeds_thumbnails);
                title=itemView.findViewById(R.id.feed_title);
                feedlike=itemView.findViewById(R.id.feeds_like);
                unlike=itemView.findViewById(R.id.feeds_unlike);
            }
        }
    
    
    
    }