我有一个recyclerView,每个列表项视图都包含两个视图-
viewmodel直接将文本更改为POJO。除了需要刷新“回收者”视图以显示更改之外,所有其他事情都可以正常工作。
我的POJO
public class Post{
private String title;
...getter and setter
}
回收商Adatper就是这样。
public class MyRecyclerAdapter extends RecyclerView.Adapter<PostRecyclerAdapter.MyViewHolder> {
private List<Post> posts;
...
class MyViewHolder extends RecyclerView.ViewHolder {
private final ViewDataBinding binding;
public MyViewHolder(ViewDataBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
void bindView(int position) {
Post post = posts.get(position);
binding.setVariable(BR.post, post);
binding.setVariable(BR.viewModel, myViewModel);
binding.executePendingBindings();
}
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
ViewDataBinding binding = DataBindingUtil.inflate(inflater, R.layout.post_list_item, parent, false);
return new MyViewHolder(binding);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.bindView(position);
}
...
}
post_list_item.xml
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="post"
type="....Post" />
<variable
name="viewModel"
type="....MyViewModel"/>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{post.title}" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClickListener="@{()->viewModel.onButtonClicked(post)}"
/>
</LinearLayout>
和viewModel具有此方法。
public class MyViewModel extends ViewModel {
public void onButtonClicked(Post post) {
post.setTitle("some text");
}
我认为有一种方法可以在POJO中的数据更改时立即更改UI。但是现在我需要从屏幕上绘制回收者视图或旋转屏幕。
答案 0 :(得分:-1)
更新适配器类中的回收站视图UI。它解决了我的问题。