java - 在 mvvm 中将 recyclerview 向下滚动到底部

标签 java android mvvm android-recyclerview android-databinding

我正在我的应用程序中实现 mvvm 和数据绑定(bind)。我使用下面的代码来设置 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来调用此方法的最佳实践是什么?

最佳答案

经过一番尝试和错误,我找到了答案。 这可以通过使用 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元素

设置绑定(bind)适配器为

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

关于java - 在 mvvm 中将 recyclerview 向下滚动到底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50736122/

相关文章:

java - 为什么我们应该将接口(interface)方法声明为公共(public)的?

java - 在 Spring 的情况下,我应该继承什么类来创建数据库集成测试?

c# - 如何通过WMVVM将WPF数据网格绑定(bind)到包含组合框和测试框组合的列

java - 处理 boolean 数组的 int 输入时遇到问题

android - 将 'Screen Zoom' 设置更改为 'Large' 完全弄乱了我应用程序中的几个屏幕(尤其是 fragment 布局)

android - Flutter-来自Firebase的readData()导致该方法在null上被调用

android - 如何测量 Android 应用程序数据大小并识别存储泄漏?

c# - CommandManager.InvalidateRequerySuggested 不会触发 RequerySuggested

c# - 打印时始终未选中 WPF 复选框

java - 为什么在更新大型数组的元素时次要 GC 持续时间会发生如此大的变化?