Android:重新绑定 ListView 或 RecyclerView 而不刷新 Header
Posted
技术标签:
【中文标题】Android:重新绑定 ListView 或 RecyclerView 而不刷新 Header【英文标题】:Android: Rebind ListView Or RecyclerView Without Refreshing Header 【发布时间】:2020-08-15 12:04:57 【问题描述】:我需要刷新/重新绑定 ListView 或 RecyclerView 内容而不刷新标题项本身。
关于如何实现这一点的任何提示?
谢谢。
【问题讨论】:
您无法通知 Listview 适配器中的部分项目,这是 listView 的一个缺点。而且RecyclerView
没有标头的本机实现。首先让我们知道您是如何创建标题的 >
【参考方案1】:
是的,您可以这样做。通常,您的标题在列表中的位置为 0,因此标题位于列表顶部。因此,对于您的列表,例如RecyclerView
你必须初始化适配器(在RecyclerView
的情况下你必须创建RecyclerView.Adapter
类的访问器)并且这个适配器有很多更新适配器中数据的方法(notifyDataSetChanged(), notifyItemInserted()
等),你可以使用一个这种方法,取决于你的目的。因此,在您的情况下,您可以使用notifyItemRangeChanged(int positionStart, int itemCount)
。
你可以在官方documentation找到更多关于这些方法的信息
【讨论】:
【参考方案2】:假设header
位于position 0
:
假设您想绑定一次标头,然后在刷新后停止绑定:
当您调用notifyDataSetChanged()
重新加载时,适配器中的onBindViewHolder()
方法会再次调用以刷新数据,请记住这一点。您可以设置一个布尔值,以便您绑定一次标题。这样即使 onBindViewHolder()
被多次调用,标头也会绑定一次。
class Adapter extends ...........
//use a boolean as a flag
private boolean bindHeader = true;
........
.......
.......
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position)
..........
if(position == 0 && bindHeader)
//bind the header only for the first time
......
......
//then stop binding after refresh
bindHeader = false;
else if(position > 0)
//bind the reset of the items here
..............
..............
【讨论】:
以上是关于Android:重新绑定 ListView 或 RecyclerView 而不刷新 Header的主要内容,如果未能解决你的问题,请参考以下文章
android 开发 listview绑定radiobutton控件 如何实现listview列表中只有一个radiobutton被选中?
Android - ListView 中的 EditTexts 绑定到自定义 ArrayAdapter - 跟踪更改
Android:将数据库中的数据绑定到 ListView 中的 CheckBox?