2014-09-12 54 views
0

我一直在試圖實現兩個ListViews之間的同步,但我似乎無法使其工作順利。兩個ListView之間的同步滾動滯後

這個想法是,列表視圖在LinearLayout中彼此相鄰排列。每個列表視圖的行可能非常複雜(即它們可能包括幾個TextView,CheckBoxes,Spinners或Buttons)。用於每個ListView的數據集明顯不同,因此左列表視圖中的行可以具有與右列表視圖中的行 不同的高度。我想要做的是讓他們在同一個位置具有相同的行高。

我設法做到這一點,使用相同的適配器的列表和介紹中介模式。它現在所做的是在getView返回視圖之前,我調用了我的中介體中的一個方法,它幾乎做了以下操作:

需要繪製LV1中的行號3。 安卓繪製它並確定它需要40個像素高。 就在它返回之前,我調用我的中介,它檢查第二個listview中同一行的高度(我保留中介中的兩個適配器實例的引用)位置,並返回它的70像素。 我將LV1中第3行的高度設置爲70並重繪它。

問題是,無論何時它需要繪製一個新行,它都會做很多工作,並且會有瘋狂的getView()調用。 另外,當我改變其中一個列表視圖的行的高度,以便它匹配另一個時,我強制在該列表視圖中完全重繪所有可見的子項,這增加了更多的滯後。

我的問題是 - 我的概念是完全錯誤的?我在這裏錯過了什麼嗎?有沒有更簡單的方法來做我想做的事?

 |  LV 1   | |   LV 2  | 
     |   1   | |   1   |  
     |   2   | |   2   | 
     |   3   | |   3   | 
     |   4   | |   4   | 
     |   5   | |   5   | 

回答

0

您可以保留行高度數組,並在第一次getView調用中存儲兩行的最大高度。然後在其他時間獲取該陣列中每行的高度。

int [] rowHeight = new int[rowCount]; 
boolean firstTime = true; 

然後在getView方法:

if(firstTime){ 
    if(rowHeight[position] < currentView.getHeight()){ 
      rowHeight[position] = currentView.getHeight(); 
    } 
}else{ 
    currentView.setHeight() = rowHeight[position]; 
} 

注:我沒有尋找確切的方法,所以你可以把上面的僞碼的代碼。

+0

問題是,當我在運行時更改視圖的高度時,所有可見視圖都會重繪,並且需要很長時間。 – 2014-09-12 10:51:15

+0

或者你應該預先計算所有的值並設置一個標準高度 – Metehan 2014-09-12 10:52:06

+0

然後你應該在通知適配器之前計算這個值,然後當你得到所有的值時開始繪製 – Metehan 2014-09-12 10:57:47