0

I implemented a like function which is similar to the Likening of Facebook. If you already liked a post then a particular imageview will be shown. on clicking on the button will reduce the like count or increase and another imageview will shown instead of previous one (toggling is perform in here).on clicking on the image the like status will post on server and new count will receive from the server as response and it will shown.It is not performing properly.Some times if i scroll up and down the list view then the liking function may work for one time after that it will stuck till scroll up and down again.Can anyone help me?Kindly ask me if you don't understand it.

public class FeedListAdapter extends BaseAdapter implements APIConstants, JsonTagConstants {

    private Activity mContext;
    private ArrayList<FeedListModel> feedModelArrayList;
    int likestatus, pos;
    private LayoutInflater mInflater;
    private String feedId, usrId, like_count;


    private int[] images = {R.drawable.feed_like_inactive, R.drawable.feed_like_active};

    public FeedListAdapter(Activity mContext, ArrayList<FeedListModel> feedModelArrayList
    ) {
        this.mContext = mContext;
        this.feedModelArrayList = feedModelArrayList;
        mInflater = (LayoutInflater) mContext.getLayoutInflater();
        System.out.println("03112015:InitialLikeStatus feedModelArrayList size:" + feedModelArrayList.size());

    }

    @Override
    public int getCount() {
        return feedModelArrayList.size();
    }

    @Override
    public Object getItem(int i) {
        return feedModelArrayList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public boolean isEnabled(int position) {
        return false;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder holder = new ViewHolder();
//
       View view;

        if (convertView == null) {

            convertView = mInflater.inflate(R.layout.custom_feeds_listview, parent, false);

        } else {
            view = convertView;
        }
            holder.imageView1 = (ImageView) convertView.findViewById(R.id.feed_iv_thumb);
            holder.imageView2 = (ImageView) convertView.findViewById(R.id.feed_iv_banner);
            holder.imageView3 = (ImageView) convertView.findViewById(R.id.feed_iv_likecount);
            holder.imageView4 = (ImageView) convertView.findViewById(R.id.feed_iv_share);
            holder.txtTitle = (TextView) convertView.findViewById(R.id.feed_tv_title);
            holder.txtSub = (TextView) convertView.findViewById(R.id.feed_tv_postdate);
            holder.txtContent = (TextView) convertView.findViewById(R.id.feed_tv_desc);
            holder.txtCount = (TextView) convertView.findViewById(R.id.feed_tv_txt_count);
            holder. progressBar = (ProgressBar) convertView.findViewById(R.id.progressBar);

        Utils.setImageFromUrl(mContext, API_IMAGE_URL + feedModelArrayList.get(position).getmBannerImage()
                , holder.imageView1,
                holder.progressBar);
        Utils.setImageFromUrl(mContext, API_IMAGE_URL + feedModelArrayList.get(position).getmBannerImage()
                , holder.imageView2,
                holder.progressBar);


        holder.txtTitle.setText(feedModelArrayList.get(position).getmTitle());


        try {
            ;
            holder.txtSub.setText(gmodifyDateLayout(feedModelArrayList.get(position).getmCreatedDate()));

        } catch (ParseException e) {
            e.printStackTrace();
        }
        likestatus = Integer.parseInt(feedModelArrayList.get(position).getmlikestatus());


        feedId = feedModelArrayList.get(position).getId();
        usrId = "2";
        System.out.println("03112015:InitialLikeStatus of " + feedId + ":" + likestatus);
        changeBackground(holder);



        holder.txtContent.setText(feedModelArrayList.get(position).

                        getmDescription()

        );
        holder.txtCount.setText(feedModelArrayList.get(position).

                        getmFeedLikeCount()

        );
        pos = position;

        holder.imageView3.setOnClickListener(new View.OnClickListener()

                                      {
                                          @Override
                                          public void onClick(View view) {


                                              if (likestatus == 0) {


                                                  likestatus = 1;




                                              } else if (likestatus == 1) {
                                                  likestatus = 0;
                                                    }
                                              System.out.println("04112015:onClick:LikeStatus" + likestatus);

                                              changeBackground(holder);

                                              addFeedLikeAPI(feedId, usrId,holder);

                                              System.out.println("03112015:FinalLikeStatus" + likestatus);

                                          }
                                      }

        );

        holder.imageView4.setOnClickListener(new View.OnClickListener()

                                      {
                                          @Override
                                          public void onClick(View view) {


                                              Toast.makeText(mContext, "Share", Toast.LENGTH_LONG).show();

                                          }
                                      }

        );
        return convertView;
    }



    private void addFeedLikeAPI(String feedId, String usrId,final ViewHolder holder ) {


        InternetManager manager = new InternetManager(API_FEEDS_POST_FEED_LIKE + feedId + "&usrId=" + usrId +
                "&like=" + likestatus);
        System.out.println("03102015:usrId:" + usrId);
        System.out.println("03102015:feedId:" + feedId);
        System.out.println("03102015:like:" + likestatus);


        String[] name = {""};
        String[] value = {""};
        manager.getResponsePOST(mContext, name, value, new InternetManager.ResponseListener() {
            @Override
            public void responseSuccess(String successResponse) {

                System.out.println("06112015:API Response::" + successResponse);
                //                API Response::{"Message":"Success"}
                try {

                    JSONObject jsonObject = new JSONObject(successResponse);
                    like_count = jsonObject.optString(JSON_FEED_LIKE_STATUS_MESSAGE);
                    System.out.println("06112015:like_count::" + like_count);


                    holder.txtCount.setText(like_count);

                } catch (Exception e) {

                }


            }

            @Override
            public void responseFailure(String failureResponse) {
                Toast.makeText(mContext, mContext.getResources().getString(R.string.feeds_error_msg), Toast.LENGTH_LONG).show();
            }
        });
    }


    public void changeBackground(final ViewHolder holder) {
        System.out.println("03112015:Inside changeBackground :LikeStatus" + likestatus);

        if (likestatus == 0) {
            System.out.println("03112015:Inside changeBackground likestatus == 0:LikeStatus" + likestatus);

            holder.imageView3.setBackgroundResource(images[0]);


        } else if (likestatus == 1) {
            System.out.println("03112015:Inside changeBackground likestatus == 1:LikeStatus" + likestatus);

            holder.imageView3.setBackgroundResource(images[1]);

        }
    }

    public String gmodifyDateLayout(String inputDate) throws ParseException {
        Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").parse(inputDate);

        return new SimpleDateFormat("dd MMM yyyy").format(date);


    }


    public class ViewHolder {
        ImageView imageView1;
        ImageView imageView2;
        ProgressBar progressBar;
        TextView txtTitle, txtSub, txtContent, txtCount;
        ImageView imageView3;
        ImageView imageView4;
    }
}

Model Class

public class FeedListModel extends ParentModel implements Serializable
{
    private String mTitle;
    private String mDescription;
    private String mCreatedDate;
    private String mBannerImage;
    private String mStatus;
    private String mFeedLikeCount;
    private String mlikestatus;

    public String getmTitle() {
        return mTitle;
    }

    public void setmTitle(String mTitle) {
        this.mTitle = mTitle;
    }

    public String getmDescription() {
        return mDescription;
    }

    public void setmDescription(String mDescription) {
        this.mDescription = mDescription;
    }

    public String getmCreatedDate() {
        return mCreatedDate;
    }

    public void setmCreatedDate(String mCreatedDate) {
        this.mCreatedDate = mCreatedDate;
    }

    public String getmBannerImage() {
        return mBannerImage;
    }

    public void setmBannerImage(String mBannerImage) {
        this.mBannerImage = mBannerImage;
    }

    public String getmStatus() {
        return mStatus;
    }

    public void setmStatus(String mStatus) {
        this.mStatus = mStatus;
    }

    public String getmFeedLikeCount() {
        return mFeedLikeCount;
    }

    public void setmFeedLikeCount(String mFeedLikeCount) {
        this.mFeedLikeCount = mFeedLikeCount;
    }

    public String getmlikestatus() {
        return mlikestatus;
    }

    public void setmlikestatus(String mlikestatus) {
        this.mlikestatus = mlikestatus;
    }
}
mehrdad khosravi
  • 2,228
  • 9
  • 29
  • 34
Noufal M
  • 163
  • 1
  • 4
  • 12

1 Answers1

0

Declare an global variable as private boolean ischecked = true;

    img.setOnClickListener(new view.OnClickListener() {

        @Override
        public void onClick(View v) {

            if (ischecked) {
                img.setBackgroundResource(R.drawable.check_true);
                ischecked = false;
            } else {
                img.setBackgroundResource(R.drawable.check_false);
                ischecked = true;
            }
        }
    });
Vignesh KM
  • 1,979
  • 1
  • 18
  • 24