【问题标题】:Android: Rebind ListView Or RecyclerView Without Refreshing HeaderAndroid:重新绑定 ListView 或 RecyclerView 而不刷新 Header
【发布时间】:2020-08-15 12:04:57
【问题描述】:

我需要刷新/重新绑定 ListView 或 RecyclerView 内容而不刷新标题项本身。

关于如何实现这一点的任何提示?

谢谢。

【问题讨论】:

  • 您无法通知 Listview 适配器中的部分项目,这是 listView 的一个缺点。而且RecyclerView 没有标头的本机实现。首先让我们知道您是如何创建标题的 >

标签: android android-recyclerview android-listview header


【解决方案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
    
    
    }
    
    
    }
    
    ..............
    
    ..............
    
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 2021-05-20
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      • 2019-04-24
      • 1970-01-01
      • 2019-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多