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/02 03:28:39 UTC
[05/25] 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-recycler
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,