Repository: incubator-weex Updated Branches: refs/heads/0.16-dev 05c3fc337 -> 68a3fb2e1
* [android] fix NPE on findFirstVisibleItemPosition Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/68a3fb2e Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/68a3fb2e Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/68a3fb2e Branch: refs/heads/0.16-dev Commit: 68a3fb2e1ae2e7f7e2aab1a8d2c60a0ae6693e74 Parents: 05c3fc3 Author: misakuo <misa...@apache.org> Authored: Mon Aug 28 21:58:42 2017 +0800 Committer: misakuo <misa...@apache.org> Committed: Mon Aug 28 21:58:42 2017 +0800 ---------------------------------------------------------------------- .../ui/component/list/BasicListComponent.java | 29 ++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/68a3fb2e/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java index bd65c1f..7559991 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java @@ -1350,6 +1350,19 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView if (layoutManager instanceof LinearLayoutManager) { int firstVisibleItemPosition = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition(); View firstVisibleView = layoutManager.findViewByPosition(firstVisibleItemPosition); + if (firstVisibleView == null) { + //Why null? + WXComponent firstVisibleComponent = getChild(firstVisibleItemPosition); + if (firstVisibleComponent != null) { + firstVisibleView = firstVisibleComponent.getHostView(); + } + } + + int firstVisibleViewOffset = 0; + if (firstVisibleView != null) { + firstVisibleViewOffset = firstVisibleView.getTop(); + } + int offset = 0; for (int i=0;i<firstVisibleItemPosition;i++) { WXComponent child = getChild(i); @@ -1363,13 +1376,25 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView offset = offset / spanCount; } - offset += firstVisibleView.getTop(); + offset += firstVisibleViewOffset; return offset; } else if (layoutManager instanceof StaggeredGridLayoutManager) { int spanCount = ((StaggeredGridLayoutManager) layoutManager).getSpanCount(); int firstVisibleItemPosition = ((StaggeredGridLayoutManager) layoutManager).findFirstVisibleItemPositions(null)[0]; View firstVisibleView = layoutManager.findViewByPosition(firstVisibleItemPosition); + if (firstVisibleView == null) { + WXComponent firstVisibleComponent = getChild(firstVisibleItemPosition); + if (firstVisibleComponent != null) { + firstVisibleView = firstVisibleComponent.getHostView(); + } + } + + int firstVisibleViewOffset = 0; + if (firstVisibleView != null) { + firstVisibleViewOffset = firstVisibleView.getTop(); + } + int offset = 0; for (int i=0;i<firstVisibleItemPosition;i++) { WXComponent child = getChild(i); @@ -1379,7 +1404,7 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView } offset = offset / spanCount; - offset += firstVisibleView.getTop(); + offset += firstVisibleViewOffset; return offset; } return -1;