2015-11-06 70 views
0

我实现了一个类似于Facebook的Likening的类似功能。如果你已经喜欢一篇文章,那么将显示一个特定的imageview。点击按钮将减少类似的计数或增加和另一imageview将显示,而不是以前的(切换是在这里执行)。点击图像时,类似的状态将在服务器上发布,新的计数将从服务器接收为它会显示。它是不正确执行。有时,如果我上下滚动列表视图然后喜欢功能可能会工作一次后,它会卡住,直到再次上下滚动。可以帮助我吗?问我你是否不明白。在列表视图中动态更改clickevent上的ImageView(切换)

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; 
    } 
} 

模型类

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; 
    } 
} 
+0

您正在使用int值来存储like或different的用途。您需要使用稀疏布尔数组或在模型中添加参数以检查或取消选中目的。 –

+0

其实在我的模型中有检查它的规定。 –

+0

然后在getView方法中检查并检查更改是否在模型中进行更改。并通知适配器。如果你可以发布你的模型,那么我可以帮你。 –

回答

0

声明一个全局变量作为 私人布尔器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; 
      } 
     } 
    });