繁体   English   中英

更新 recyclerview 适配器中的一项

[英]update one item in recyclerview adapter

这是我的 ReplyAdapter.java :

public class ReplyAdapter extends RecyclerView.Adapter<ReplyAdapter.MyViewHolder> {
private Context context;
private List<Reply> replies;
private ProgressDialog pDialog;


public ReplyAdapter(Context context, List<Reply> replies) {
    this.context = context;
    this.replies = replies;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.replies_list, parent, false);
    return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, @SuppressLint("RecyclerView") final int position) {

    holder.reply_id.setText(String.valueOf(replies.get(position).getId()));
    holder.replyuserid.setText(String.valueOf(replies.get(position).getUserid()));
    holder.alike.setText(replies.get(position).getAlike());
    holder.adislike.setText(replies.get(position).getAdislike());
    holder.btn_like_reply.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            pDialog = new ProgressDialog(context, R.style.CustomProgress);
            pDialog.setCancelable(false);
            pDialog.show();
            int postid = replies.get(position).getId();
            int vote = 1;
            SendVoteRequest(postid, vote);

        }
    });


private void SendVoteRequest(int postid, final int vote) {
    PrefConfig prefConfig = new PrefConfig(context);
    int userid = Integer.parseInt(prefConfig.Readuserid());
    String token = prefConfig.Readtoken();
    APIInterface apiInterface = APIClient.getClient().create(APIInterface.class);
    Call<Vote> call = apiInterface.SendNewVote(userid, postid, token, vote);
    call.enqueue(new Callback<Vote>() {
        @Override
        public void onResponse(Call<Vote> call, Response<Vote> response) {
            hidePDialog();
            if (response.isSuccessful()) {
                Vote vote = response.body();
                Toast.makeText(context, vote.getMessage(), Toast.LENGTH_LONG).show();
                String flag = vote.getFlag();
                if (flag.equals("1")) {
                //    Intent intent = ((Activity) context).getIntent();
                  //  context.startActivity(intent);
                 //   ((Activity) context).finish();

                    //Here alike value must be updated.
                }

            } 

当用户点击喜欢按钮时,“SendVoteRequest”调用并发送到服务器。 如果响应成功返回标志=1; 刷新此代码页并更新值:

Intent intent = ((Activity) context).getIntent();
context.startActivity(intent);
((Activity) context).finish();

但我不想刷新页面。我重新加载“holder.alike”值。

notifyItemChanged 不起作用。

 if (flag.equals("1")) {
  ReplyAdapter.this.notifyItemChanged(1);
  }

您可以使用两种方式:

1 - 使用adapter.notifyItemChanged(updateIndex)

2 - 使用 DiffUtil 链接

我建议你研究 DiffUtil

您需要通知您的适配器某个位置的项目发生了变化。 请看看需要一个关于 RecyclerView.Adapter.notifyItemChanged(int position, Object payload) 的例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM