Android Databinding не обновляет пользовательский интерфейс сразу в RecyclerView - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть 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,Но теперь мне нужно отрисовать вид переработчика за пределы экрана или повернуть экран.

1 Ответ

0 голосов
/ 29 марта 2019

Обновление интерфейса просмотра переработчика в вашем классе адаптера.Это решило мою проблему.

...