You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by cx...@apache.org on 2017/03/05 11:19:09 UTC

[05/29] incubator-weex git commit: * [android] recycler component adapter appear event

* [android] recycler component adapter appear event


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/7984c9b5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/7984c9b5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/7984c9b5

Branch: refs/heads/0.11-dev
Commit: 7984c9b59b63652720f45b4241f39b1bfe70600e
Parents: 61cfd37
Author: zshshr <zh...@gmail.com>
Authored: Thu Feb 23 15:49:37 2017 +0800
Committer: zshshr <zh...@gmail.com>
Committed: Thu Feb 23 15:49:37 2017 +0800

----------------------------------------------------------------------
 .../weex/ui/component/list/WXListComponent.java | 18 ++--
 .../weex/ui/view/listview/WXRecyclerView.java   |  4 -
 .../adapter/WXRecyclerViewOnScrollListener.java | 94 +++++++++++++-------
 3 files changed, 75 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7984c9b5/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXListComponent.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXListComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXListComponent.java
index 5299945..fa91d1c 100755
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXListComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXListComponent.java
@@ -307,16 +307,16 @@ public class WXListComponent extends BasicListComponent<BounceRecyclerView> {
   @WXComponentProp(name = Constants.Name.COLUMN_COUNT)
   public void setColumnCount(int columnCount) throws InterruptedException {
     WXLogUtils.w("zshshr","setColumnCount :  "+"htread:"+Thread.currentThread().getName());
-    mColumnCount = columnCount;
-    WXRecyclerView wxRecyclerView = getHostView().getInnerView();
-    wxRecyclerView.initView(getContext(), mLayoutType,mColumnCount,mColumnGap,getOrientation());
+//    mColumnCount = columnCount;
+//    WXRecyclerView wxRecyclerView = getHostView().getInnerView();
+//    wxRecyclerView.initView(getContext(), mLayoutType,mColumnCount,mColumnGap,getOrientation());
   }
 
   @WXComponentProp(name = Constants.Name.COLUMN_GAP)
   public void setColumnGap(float columnGap) throws InterruptedException {
-    mColumnGap = columnGap;
-    WXRecyclerView wxRecyclerView = getHostView().getInnerView();
-    wxRecyclerView.initView(getContext(), mLayoutType,mColumnCount,mColumnGap,getOrientation());
+//    mColumnGap = columnGap;
+//    WXRecyclerView wxRecyclerView = getHostView().getInnerView();
+//    wxRecyclerView.initView(getContext(), mLayoutType,mColumnCount,mColumnGap,getOrientation());
   }
 
   @WXComponentProp(name = Constants.Name.SHOW_SCROLLBAR)
@@ -328,6 +328,12 @@ public class WXListComponent extends BasicListComponent<BounceRecyclerView> {
     wxRecyclerView.initView(getContext(), mLayoutType,mColumnCount,mColumnGap,getOrientation());
   }
 
+  @WXComponentProp(name = Constants.Name.SCROLLABLE)
+  public void setScrollable(boolean scrollable) {
+    WXRecyclerView wxRecyclerView = getHostView().getInnerView();
+    wxRecyclerView.setScrollable(scrollable);
+  }
+
 
   @Override
   public void createChildViewAt(int index) {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7984c9b5/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/WXRecyclerView.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/WXRecyclerView.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/WXRecyclerView.java
index dc8a209..09bedbb 100755
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/WXRecyclerView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/WXRecyclerView.java
@@ -264,10 +264,6 @@ public class WXRecyclerView extends RecyclerView implements WXGestureObservable
     } else if (type == TYPE_LINEAR_LAYOUT) {
       setLayoutManager(new ExtendedLinearLayoutManager(context,orientation,false));
     }
-
-    setVerticalScrollBarEnabled(true);
-    setScrollable(true);
-    setScrollBarSize(10); 
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7984c9b5/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/WXRecyclerViewOnScrollListener.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/WXRecyclerViewOnScrollListener.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/WXRecyclerViewOnScrollListener.java
index ad60ade..6e93d4f 100755
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/WXRecyclerViewOnScrollListener.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/WXRecyclerViewOnScrollListener.java
@@ -225,17 +225,27 @@ public class WXRecyclerViewOnScrollListener extends RecyclerView.OnScrollListene
   /**
    * The last position
    */
-  private int[] lastPositions;
+  private int[] mLastPositions;
+  /**
+   * The first position
+   */
+  private int[] mFirstPositions;
+
+
+  /**
+   * The location of last visible item
+   */
+  private int mLastVisibleItemPosition;
 
   /**
    * The location of last visible item
    */
-  private int lastVisibleItemPosition;
+  private int mFirstVisibleItemPosition;
 
   /**
    * The state of scroll status
    */
-  private int currentScrollState = 0;
+  private int mCurrentScrollState = 0;
 
   private WeakReference<IOnLoadMoreListener> listener;
 
@@ -246,14 +256,14 @@ public class WXRecyclerViewOnScrollListener extends RecyclerView.OnScrollListene
   @Override
   public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
     super.onScrollStateChanged(recyclerView, newState);
-    currentScrollState = newState;
+    mCurrentScrollState = newState;
     RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
     int visibleItemCount = layoutManager.getChildCount();
     int totalItemCount = layoutManager.getItemCount();
 
     if (visibleItemCount != 0) {
-      int bottomOffset = (totalItemCount - lastVisibleItemPosition - 1) * (recyclerView.getHeight()) / visibleItemCount;
-      if (visibleItemCount > 0 && currentScrollState == RecyclerView.SCROLL_STATE_IDLE) {
+      int bottomOffset = (totalItemCount - mLastVisibleItemPosition - 1) * (recyclerView.getHeight()) / visibleItemCount;
+      if (visibleItemCount > 0 && mCurrentScrollState == RecyclerView.SCROLL_STATE_IDLE) {
         if (listener != null && listener.get() != null) {
           listener.get().onLoadMore(bottomOffset);
         }
@@ -266,36 +276,48 @@ public class WXRecyclerViewOnScrollListener extends RecyclerView.OnScrollListene
     super.onScrolled(recyclerView, dx, dy);
     RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
     IOnLoadMoreListener l;
-    if((l = listener.get()) != null){
-      l.onBeforeScroll(dx,dy);
+    if ((l = listener.get()) != null) {
+      l.onBeforeScroll(dx, dy);
     }
 
     //  int lastVisibleItemPosition = -1;
-    if (layoutManagerType == null) {
-      if (layoutManager instanceof LinearLayoutManager) {
-        layoutManagerType = LAYOUT_MANAGER_TYPE.LINEAR;
-        lastVisibleItemPosition = ((LinearLayoutManager) layoutManager).findLastVisibleItemPosition();
-        listener.get().notifyAppearStateChange(((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition()
-                ,lastVisibleItemPosition
-                ,dx
-                ,dy);
-      } else if (layoutManager instanceof GridLayoutManager) {
-        layoutManagerType = LAYOUT_MANAGER_TYPE.GRID;
-        GridLayoutManager gridLayoutManager = ((GridLayoutManager) layoutManager);
-        lastVisibleItemPosition = gridLayoutManager.findLastVisibleItemPosition();
+    if (layoutManager instanceof LinearLayoutManager) {
+      layoutManagerType = LAYOUT_MANAGER_TYPE.LINEAR;
+      mLastVisibleItemPosition = ((LinearLayoutManager) layoutManager).findLastVisibleItemPosition();
+      listener.get().notifyAppearStateChange(((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition()
+              , mLastVisibleItemPosition
+              , dx
+              , dy);
+    } else if (layoutManager instanceof GridLayoutManager) {
+      layoutManagerType = LAYOUT_MANAGER_TYPE.GRID;
+      GridLayoutManager gridLayoutManager = ((GridLayoutManager) layoutManager);
+      mLastVisibleItemPosition = gridLayoutManager.findLastVisibleItemPosition();
+      listener.get().notifyAppearStateChange(((GridLayoutManager) layoutManager).findFirstVisibleItemPosition()
+              , mLastVisibleItemPosition
+              , dx
+              , dy);
 
-      } else if (layoutManager instanceof StaggeredGridLayoutManager) {
-        layoutManagerType = LAYOUT_MANAGER_TYPE.STAGGERED_GRID;
-        StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager) layoutManager;
-        if (lastPositions == null) {
-          lastPositions = new int[staggeredGridLayoutManager.getSpanCount()];
-        }
-        staggeredGridLayoutManager.findLastVisibleItemPositions(lastPositions);
-        lastVisibleItemPosition = findMax(lastPositions);
-      } else {
-        throw new RuntimeException(
-            "Unsupported LayoutManager used. Valid ones are LinearLayoutManager, GridLayoutManager and StaggeredGridLayoutManager");
+    } else if (layoutManager instanceof StaggeredGridLayoutManager) {
+      layoutManagerType = LAYOUT_MANAGER_TYPE.STAGGERED_GRID;
+      StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager) layoutManager;
+      if (mLastPositions == null) {
+        mLastPositions = new int[staggeredGridLayoutManager.getSpanCount()];
+      }
+      if (mFirstPositions == null) {
+        mFirstPositions = new int[staggeredGridLayoutManager.getSpanCount()];
       }
+      staggeredGridLayoutManager.findFirstVisibleItemPositions(mFirstPositions);
+      mFirstVisibleItemPosition = findMin(mFirstPositions);
+      staggeredGridLayoutManager.findLastVisibleItemPositions(mLastPositions);
+      mLastVisibleItemPosition = findMax(mLastPositions);
+      listener.get().notifyAppearStateChange(
+              mFirstVisibleItemPosition
+              , mLastVisibleItemPosition
+              , dx
+              , dy);
+    } else {
+      throw new RuntimeException(
+              "Unsupported LayoutManager used. Valid ones are LinearLayoutManager, GridLayoutManager and StaggeredGridLayoutManager");
     }
   }
 
@@ -309,6 +331,16 @@ public class WXRecyclerViewOnScrollListener extends RecyclerView.OnScrollListene
     return max;
   }
 
+  private int findMin(int[] firstPositions) {
+    int min = firstPositions[0];
+    for (int value : firstPositions) {
+      if (value < min) {
+        min = value;
+      }
+    }
+    return min;
+  }
+
   public enum LAYOUT_MANAGER_TYPE {
     LINEAR,
     GRID,