#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)