android - 搜索 Recyclerview - 当搜索为空时滚动到顶部
问题描述
我正在尝试使用房间和视图模型在我的回收站视图中实现搜索功能。
该功能在搜索时工作得很好。但是,如果我清空搜索字符串,recyclerview 不会滚动到完整列表的顶部。
代码下方:
视图模型
@HiltViewModel
class MyViewModel @Inject constructor(repository: MyRepository) :
ViewModel() {
private var nameFilter = MutableLiveData<String>("")
val allPosts : LiveData<List<Post>> = Transformations.switchMap(nameFilter) { name ->
if (name.isEmpty()) {
repository.getAllPosts()
} else {
repository.getPostByName(name)
}
}
fun getPostByName(name: String) {
nameFilter.postValue(name)
}
}
分段
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val listAdapter = MyListAdapter()
binding.RV.apply {
adapter = listAdapter
layoutManager = GridLayoutManager(context, 2)
// Just for spacing
addItemDecoration(RecyclerViewCustomItemDecorator(8, 8))
}
binding.searchRV.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
}
override fun afterTextChanged(editable: Editable?) {
viewModel.getPostByName(editable.toString())
}
})
viewModel.allPosts.observe(viewLifecycleOwner) {
listAdapter.submitList(it)
}
}
Recyclerview 适配器实现了 diffUtil 逻辑。
希望任何人都可以提供帮助!谢谢
解决方案
在回收站视图中,当用户处于滚动底部时,有一个属性可以在顶部滚动 mRecyclerView.smoothScrollToPosition(0);
SmoothScrollToPosition 帮助在顶部平滑滚动您也可以使用mRecyclerView.layoutManager?.scrollToPosition(0)
如果我们使用滚动视图然后使用
scrollView.fullScroll(ScrollView.FOCUS_UP); .
推荐阅读
- reactjs - 将状态传递给另一个组件中的状态 - React
- c - 在 Linux 上将 iconv 与 WCHAR_T 一起使用
- amazon-web-services - 如何防止 Cognito 在没有电子邮件验证的情况下保留用户名/电子邮件?
- python - 为什么修改后numpy向量的值不改变?
- c - 字符范围是正数,那么如果我在其中存储一个整数,它应该打印一个介于(0-255)之间的值。为什么输出是-24
- python - 在多个数组中查找重复数字?
- node.js - 使用 pm2 运行 yarn 命令
- php - 如何修复损坏的链接 wordpress web config rewrite index.php 损坏站点链接错误 404
- bash - 如何将两个参数传递给bash脚本
- java - 在Java中将一个对象(单行中的4个字符串变量)添加到JList