首页 > 解决方案 > 在mvvm中向下滚动recyclerview到底部

问题描述

我在我的应用程序中实现 mvvm 和数据绑定。我使用下面的代码来设置 recyclerview 适配器

@BindingAdapter({"bind:setAdapter"})
public static void setUpAdapter(RecyclerView recyclerView, RecyclerView.Adapter adapter) {
    recyclerView.setAdapter(adapter);
}

布局包含

    <android.support.v7.widget.RecyclerView
    android:layout_width="0dp"
    android:layout_height="0dp"
    tools:itemCount="2"
    tools:listitem="@layout/chat_bubble_left"
    app:layoutManager="android.support.v7.widget.LinearLayoutManager"
    app:setAdapter="@{chatViewModel.chatMessageAdapter}"/>

适配器包含在 viewModel 中

我需要的是我想打电话

recyclerView.scrollToPosition(items.size() - 1);

我从哪里调用此方法以及引用 recyclerview 调用此方法的最佳做法是什么?

标签: javaandroidmvvmandroid-recyclerviewandroid-databinding

解决方案


经过反复试验,我找到了答案。这可以通过使用 observableInt 来完成,每次更新 list 时都应将其设置为 (list-1) 。

public ObservableInt scrollTo=new ObservableInt();

……

 list.addAll(templist);
 chatMessageAdapter.notifyItemInserted(list.size()-1);                
 chatMessageAdapter.scrollTo.set(list.size()-1);

并使用

app:scrollTo="@{chatViewModel.chatMessageAdapter.scrollTo}

在布局中的 RecyclerView 元素中

设置绑定适配器为

@BindingAdapter({"bind:scrollTo"})
public static void scrollTo(RecyclerView recyclerView, int position) {
    recyclerView.scrollToPosition(position);
}

推荐阅读