Как обновить сложные параметры элемента recyclerview?

#java #android-recyclerview

#java #android-recyclerview

Вопрос:

вот мой пост:

     public class PostItems {

    private String id_wall_post, id_user, text_wall_post, ..........;

    public PostItems(String id_wall_post, String id_user, String text_wall_post, ..............) {
        this.id_wall_post = id_wall_post;
        this.id_user = id_user;
        this.text_wall_post = text_wall_post;
    }

    String get_id_wall_post() {
        return id_wall_post;
    }

    String get_id_user() {
        return id_user;
    }

    String get_text_wall_post() {
        return text_wall_post;
    }
    ...
    ...
    .........
    ...
    ...
}
  

Вот мой адаптер:

 public class PostAdapter extends RecyclerView.Adapter<PostAdapter.PostViewHolder> {

    private List<PostItems> postList;
    private Context context;

    PostAdapter(List<PostItems> postList, Context context) {
        this.postList = postList;
        this.context = context;
    }

    @NonNull
    @Override
    public PostViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_view_wall_post, parent, false);
        return new PostViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull PostViewHolder holder, int position) {
        PostItems post_items = postList.get(position);
             ...
             ...
             .........
             ...
             ...
    }

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

    static class PostViewHolder extends RecyclerView.ViewHolder {
        PostViewHolder(@NonNull View itemView) {
            super(itemView);
        }
    }
}
  

С помощью retrofit recyclerview заполняется правильно:

 postList.addAll(response.body());
  postAdapter = new PostAdapter(postList, ProfileActivity.this);
  recyclerView.setAdapter(postAdapter);
  

У меня также есть Editext, где пользователь может обновить значение text_wall_post; Теперь я хочу обновить параметр элемента text_wall_post для RecyclerView?

Как я могу обновить параметр, специфичный для элемента RecyclerView?

РЕДАКТИРОВАТЬ: я обнаружил, что:

 postList.set(1, new PostItems("1","1176", "some text update here", ..................));
postAdapter.notifyItemChanged(1);
  

В моем RecyclerView у меня более 20 параметров.

Которые работают, но я хочу более чистый способ обновления только необходимого параметра без обновления всех параметров.

Спасибо за любую помощь.

Комментарии:

1. Я не уверен в вашем вопросе, но похоже, что он на самом recyclerview деле пуст, потому что вы не установили значение ни для одного элемента.

2. @ First dev recyclerview не является пустым, он заполняется после успешной модификации запроса

3. попробуйте обновить text_wall_pos postList в определенной позиции, а затем вызвать postAdapter.notifyItemChanged (position)

4. попробуйте обновить text_wall_pos в PostList , как? Я не знаю, как это сделать, поэтому я здесь за помощью.

Ответ №1:

Вы можете изменить элемент, не создавая новый. Сначала создайте сеттеры (например, созданные вами геттеры), чтобы изменить определенный параметр из объекта ( postItems в данном случае)

     public class PostItems {

private String id_wall_post, id_user, text_wall_post, ..........;

public PostItems(String id_wall_post, String id_user, String text_wall_post, ..............) {
    this.id_wall_post = id_wall_post;
    this.id_user = id_user;
    this.text_wall_post = text_wall_post;
}

String get_id_wall_post() {
    return id_wall_post;
}

String get_id_user() {
    return id_user;
}

String get_text_wall_post() {
    return text_wall_post;
}

public void setIdWallPost(String idWallpost){
    this.id_wall_post = idWallpost;
}
public void setIdUser(String idUser){
    this.id_user = idWallUser;
}
public void setTextWallPost(String textWallPost){
    this.text_wall_post = textWallPost;
}
...
...
.........
...
...
}
  

Вы также можете заставить Android Studio генерировать их для вас, нажав Alt Inser > Setter

Затем получите элемент с определенной позицией postList и обновите нужный параметр

 postList.get(position).setTextWallPost("new value here");
  

И, наконец, вызовите

 postAdapter.notifyItemChanged (position)