2016-07-19 54 views
2

我执行RecyclerView其中有两个ViewType。该列表是动态的,当用户向下/向上滚动时,添加一些项目。在我的RecyclerView中,只有一个项目具有不同的ViewType(将此视为可展开列表,其中只有一个项目一次展开)。在新数据插入后将特定项目的位置保存在RecyclerView中

我为扩展项目保存位置但是,当新数据添加时,这个位置改变了,我失去了扩展项目。由于在向上/向下滚动时添加的数据,根据新数据的大小更新扩展项目并不是好主意。

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

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

回答

1

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

实现散列码和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); 
1

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

什么是关键点,你使用特殊的参考保存位置。 你需要做的只是把这个位置(扩展项目)放到当前模型中。毕竟大多数工作正常。

+0

感谢您的答复。首先加载的项目我想移动到扩展项目,你有什么想法如何做到这一点?我使用项目的位置,因为我使用** recyclerview.scrolltoPosition()**来解决这个问题,但用你的解决方案它不再工作。 – Amir

+0

在您使用的模型类中实现哈希码并等于。使用ArrayList.indexOf(model_object)来获取扩展项目的位置,在其上使用recyclerview.scrolltoPosition()。希望能帮助到你。 http://tutorials.jenkov.com/java-collections/hashcode-equals.html –

+0

@AlokOmkar非常感谢您的提示。将其作为解决方案发布:) – Amir

相关问题