2017-06-21 45 views
0

当我点击类似按钮时,如果尝试更新计数,它会在第一次更新,但下次尝试增加计数时它会显示计数的原始值,之后,如果我尝试显示增加值,它会间歇性地工作。NotifyIteam在recyclerview中更改为无法正常工作

public CategoryListAdapter(Context context, Activity act, ArrayList<CategoryRequest> mData) { 
      this.ctx = context; 
      this.data = mData; 
      this.activity = act; 
      // this.arraylist = new ArrayList<CategoryRequest>(); 
      // this.arraylist.addAll(mData); 
     } 

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

      itemView = LayoutInflater. 
        from(parent.getContext()). 
        inflate(R.layout.row_category, parent, false); 
      return new Viewholder(itemView); 
     } 

     @Override 
     public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) { 
      categoryRequest = getItem(position); 

      ((Viewholder) holder).usrname.setText(categoryRequest.getUsr_name()); 
      ((Viewholder) holder).postname.setText(categoryRequest.getPost_title()); 
      ((Viewholder) holder).location.setText(categoryRequest.getPost_location()); 
      ((Viewholder) holder).post_description.setText(categoryRequest.getPost_desc()); 
      ((Viewholder) holder).like.setText("Good" + "(" + categoryRequest.getPost_good() + ")"); 
      ((Viewholder) holder).dislike.setText("Bad" + "(" + categoryRequest.getPost_bad() + ")"); 
      ((Viewholder) holder).comments.setText("Comments" + "(" + categoryRequest.getPost_comment() + ")"); 


      /** 
      * click on good button 
      */ 
      ((Viewholder) holder).like.setTag(position); 

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

        TextView text = (TextView) v; 

        if (text.getTag() == v.getTag()) { 

         position_likedislike = Integer.parseInt("" + text.getTag()); 

         LikeDislikeRequest likeDislikeRequest = new LikeDislikeRequest(); 
         likeDislikeRequest.setLike_lgn_id("1"); 
         likeDislikeRequest.setLike_post_id(data.get(Integer.parseInt("" + text.getTag())).getPost_id()); 
         likeDislikeRequest.setLike_type("1"); 

         HTTPWebRequest.LikeDislikePost(activity, likeDislikeRequest, AppConstants.APICode.likepost, CategoryListAdapter.this); 
        } 
       } 
      }); 

      /** 
      * click on bad button 
      */ 

      ((Viewholder) holder).dislike.setTag(position); 

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

        TextView text = (TextView) v; 

        if (text.getTag() == v.getTag()) { 

         position_likedislike = Integer.parseInt("" + text.getTag()); 

         LikeDislikeRequest likeDislikeRequest = new LikeDislikeRequest(); 
         likeDislikeRequest.setLike_lgn_id("1"); 
         likeDislikeRequest.setLike_post_id(data.get(Integer.parseInt("" + text.getTag())).getPost_id()); 
         likeDislikeRequest.setLike_type("2"); 

         HTTPWebRequest.LikeDislikePost(activity, likeDislikeRequest, AppConstants.APICode.dislikepost, CategoryListAdapter.this); 
        } 
       } 
      }); 
     } 

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

     public CategoryRequest getItem(int pos) { 
      return data.get(pos); 
     } 

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

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

     public void add(List<CategoryRequest> items) { 

      Log.e("data for update", items.get(0).getPost_good()); 
      Log.e("data for update2", items.get(1).getPost_good()); 

      int previousDataSize = this.data.size(); 
      this.data.addAll(items); 
      notifyItemRangeInserted(previousDataSize, items.size()); 
     } 


     @Override 
     public void apiResponsePostProcessing(String response, int apiCode) { 
      Log.d("Login Responce", "response=====" + response); 
      if (response != null) { 
       Gson gson = new Gson(); 
       try { 
        switch (apiCode) { 

         case AppConstants.APICode.likepost: 
          LikeDisLikeResponse likeDisLikeResponse = new LikeDisLikeResponse(); 
          likeDisLikeResponse = gson.fromJson(response, LikeDisLikeResponse.class); 

          if (likeDisLikeResponse.getSTATUS().equals("SUCCESS")) { 
           gson = new GsonBuilder() 
             .registerTypeAdapter(LikeDislikeRequest.class, new LikeDisLikeResponse()) 
             .create(); 
           LikeDislikeRequest likeDislikeRequest = gson.fromJson(response, LikeDislikeRequest.class); 

           Log.e("Like count", likeDislikeRequest.getTotalcount()); 


           changeLikeCount(position_likedislike, likeDislikeRequest.getTotalcount()); 

          } else { 
           Toast.makeText(activity, likeDisLikeResponse.getMESSAGES().toString(), Toast.LENGTH_LONG).show(); 
          } 
          break; 
         case AppConstants.APICode.dislikepost: 
          LikeDisLikeResponse likeDisLikeResponse1 = new LikeDisLikeResponse(); 
          likeDisLikeResponse1 = gson.fromJson(response, LikeDisLikeResponse.class); 

          if (likeDisLikeResponse1.getSTATUS().equals("SUCCESS")) { 
           gson = new GsonBuilder() 
             .registerTypeAdapter(LikeDislikeRequest.class, new LikeDisLikeResponse()) 
             .create(); 
           LikeDislikeRequest likeDislikeRequest = gson.fromJson(response, LikeDislikeRequest.class); 


           changeDisLikeCount(position_likedislike, likeDislikeRequest.getTotalcount()); 

          } else { 
           Toast.makeText(activity, likeDisLikeResponse1.getMESSAGES().toString(), Toast.LENGTH_LONG).show(); 
          } 
          break; 
        } 
       } catch (Exception e) { 
        Log.e("OrderListActivity ", "Error in response" + e); 
       } 
      } 
     } 

     private void changeLikeCount(int i, String count) { 

      data.get(i).setPost_good(count); 
      notifyItemChanged(i); 

     } 

     private void changeDisLikeCount(int i, String count) { 

      data.get(i).setPost_bad(count); 
      notifyItemChanged(i); 


     } 
+0

添加notifyDataSetChanged(); notifyItemChanged()完成后。 –

+0

你为什么不在你自定义的'ViewHolder'里面调用'setOnClickListener'?只是让它实现'OnClickListener'接口,然后调用'setOnClickListener(this)'并删除那个丑陋的'setTag' /'getTag'东西 – pskink

回答

0

尝试使用处理程序:

private void changeLikeCount(final int i, final String count) { 
    Handler handler = new Handler(); 
    handler.post(new Runnable() { 
     @Override 
     public void run() { 
      data.get(i).setPost_good(count); 
      notifyItemChanged(i); 
     } 
    }); 
} 

private void changeDisLikeCount(final int i, final String count) { 
    Handler handler = new Handler(); 
    handler.post(new Runnable() { 
     @Override 
     public void run() { 
      data.get(i).setPost_bad(count); 
      notifyItemChanged(i); 
     } 
    }); 
} 
+0

它增加了第二次的值,但它立即替换为orignal值,点击后增加正确地评估它发生的变化 –

相关问题