插入新数据后,在RecyclerView中保存特定项目的位置

时间:2016-07-19 06:18:43

标签: android android-recyclerview android-adapter

我实施RecyclerView,其中有两个ViewType。该列表是动态的,当用户向下/向上滚动时,它会添加一些项目。在我的RecyclerView中,只有一个项目具有不同的ViewType(将其视为可扩展列表,其中只有一个项目一次扩展)。

我保存扩展项目的位置但是当新数据添加时此位置发生了变化而我丢失了扩展项目。因为向下/向上添加数据,根据新数据的大小更新扩展项目并不好。

有一点需要注意的是,我想在第一次加载时滚动到展开的项目。所以我猜保存位置将是最好的选择。 (我猜,但我不确定);

我想知道处理这个问题的有效方法是什么?

2 个答案:

答案 0 :(得分:1)

可能您使用模型将数据加载到RecyclerView。此模型(例如ContactModel)包含ViewHolders的不同值。

有什么意义,您对该保存位置使用特殊参考。 你需要做什么,只是将(扩展项目的)位置放到当前模型中。毕竟大多数工作正常。

答案 1 :(得分:1)

http://tutorials.jenkov.com/java-collections/hashcode-equals.html

实现hashcode和equals方法,使用此方法获取扩展模型对象的位置。

示例:

public class Employee {
    protected long   employeeId;
    protected String firstName;
    protected String lastName;

    public boolean equals(Object o){
    if(o == null)                return false;
    if(!(o instanceof) Employee) return false;

    Employee other = (Employee) o;
    if(this.employeeId != other.employeeId)      return false;
    if(! this.firstName.equals(other.firstName)) return false;
    if(! this.lastName.equals(other.lastName))   return false;

    return true;
  }

  public int hashCode(){
    return (int) employeeId;
  }
}

// To get the index of expanded item
int expandedItemIndex = EmployeeList.indexOf(expandedEmployeeModel);
recyclerView.scrollToPosition(expandedItemIndex);