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;

Reply via email to