更新recyclerview适配器中的一项



这是我的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;价值

notifyItemChanged不起作用。

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

您可以使用两种方式:

1-使用适配器.notifyItemChanged(updateIndex(

2-使用DiffUtil链接

我建议你研究DiffUtil

您需要通知适配器某个位置的项发生了更改。请看一下需要一个关于RecyclerView.Adapter.notifyItemChanged(int position,Object payload(的示例

最新更新