2017-04-24 146 views
1

我試圖覆蓋measureChild,GridLayoutManager以在測量中使用特定的佈局參數。但GridLayoutManager擁有自己的私人執行measureChild測量GridLayoutManager中的子節點

private void measureChild(View view, int otherDirParentSpecMode, boolean alreadyMeasured) 

如果我重寫公共measureChildRecyclerView.LayoutManager

@Override 
public void measureChild(View child, int widthUsed, int heightUsed) { 
    super.measureChild(child, widthUsed, heightUsed); 
} 

將永遠不會被調用。

是否可以測量GridLayoutManager中的兒童?

回答

0

2種方法有不同的簽名,所以你不應該有任何問題覆蓋它們。根據您爲子類中的函數指定的參數,將調用相應的超級參數。

但是,您需要修改從GridLayoutManager擴展的子類,以覆蓋所有使用GridLayoutmanager的measureChild實現的功能,以便能夠使用其他實現。

要檢查哪些方法調用measureChild內GridLayoutManager你可以看看source

編輯:好像從LinearLayoutManager衍生layoutChunk方法是包私有所以在這種情況下,我想唯一的辦法就是延長RecyclerView.LayoutManager並複製GridLayoutManager的整個代碼替換measureChild調用與您自己的替換適當地修改代碼

+0

無法重寫'GridLayoutManager's'measureChild',因爲它是一個'private'方法:https://github.com /安卓/ PL atform_frameworks_support/blob/master/v7/recyclerview/src/android/support/v7/widget/GridLayoutManager.java#L710 – g4s8

+0

也許我應該用不同的方式寫它。我的意思是說,只要你修改使用'measureChild'的方法並將它們替換爲你的實現,它就可以無縫工作。在這種情況下,我認爲這只是'layoutChunk'方法 – akash93

+0

@ g4s8,似乎手動執行是唯一的方法。檢查我編輯的答案,但我會建議不要這樣做,因爲難以維護代碼以防止將來更新庫 – akash93