У меня есть recyclerView, и каждый вид элемента списка содержит два вида -
- текстовое представление для отображения некоторого текста из POJO с использованием библиотеки привязки данных и
- кнопка, когда эта кнопкащелкнув, он вызывает метод из viewmodel.
Viewmodel изменяет текст непосредственно на POJO.Все работает нормально, за исключением того, что представление рециркулятора необходимо обновить, чтобы показать изменения.
Мой POJO
public class Post{
private String title;
...getter and setter
}
Recycler 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,Но теперь мне нужно отрисовать вид переработчика за пределы экрана или повернуть экран.