2016-07-19 65 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

相關問題