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?

Android:以编程方式突出显示listview中的当前选定选项

使用android中的类将数据绑定到listview

Android ListView 更新颜色