Search in sources :

Example 1 with RecyclerViewBaseAdapter

use of com.taobao.weex.ui.view.listview.adapter.RecyclerViewBaseAdapter in project weex-example by KalicyZhou.

the class BasicListComponent method initComponentHostView.

@Override
protected T initComponentHostView(@NonNull Context context) {
    T bounceRecyclerView = generateListView(context, getOrientation());
    String transforms = (String) getDomObject().getAttrs().get(TRANSFORM);
    if (transforms != null) {
        bounceRecyclerView.getInnerView().addItemDecoration(parseTransforms(transforms));
    }
    RecyclerViewBaseAdapter recyclerViewBaseAdapter = new RecyclerViewBaseAdapter<>(this);
    recyclerViewBaseAdapter.setHasStableIds(true);
    bounceRecyclerView.setRecyclerViewBaseAdapter(recyclerViewBaseAdapter);
    bounceRecyclerView.setOverScrollMode(View.OVER_SCROLL_NEVER);
    bounceRecyclerView.getInnerView().clearOnScrollListeners();
    bounceRecyclerView.getInnerView().addOnScrollListener(mViewOnScrollListener);
    bounceRecyclerView.getInnerView().addOnScrollListener(new RecyclerView.OnScrollListener() {

        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            if (newState == RecyclerView.SCROLL_STATE_IDLE) {
                for (ListBaseViewHolder holder : recycleViewList) {
                    if (holder != null && holder.getComponent() != null && !holder.getComponent().isUsing()) {
                        recycleImage(holder.getView());
                    }
                }
                recycleViewList.clear();
            }
            List<OnWXScrollListener> listeners = getInstance().getWXScrollListeners();
            if (listeners != null && listeners.size() > 0) {
                for (OnWXScrollListener listener : listeners) {
                    if (listener != null) {
                        View topView = recyclerView.getChildAt(0);
                        if (topView != null) {
                            int y = topView.getTop();
                            listener.onScrollStateChanged(recyclerView, 0, y, newState);
                        }
                    }
                }
            }
        }

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            List<OnWXScrollListener> listeners = getInstance().getWXScrollListeners();
            if (listeners != null && listeners.size() > 0) {
                for (OnWXScrollListener listener : listeners) {
                    if (listener != null) {
                        listener.onScrolled(recyclerView, dx, dy);
                    }
                }
            }
        }
    });
    bounceRecyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

        @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
        @Override
        public void onGlobalLayout() {
            T view;
            if ((view = getHostView()) == null)
                return;
            mViewOnScrollListener.onScrolled(view.getInnerView(), 0, 0);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            } else {
                view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            }
        }
    });
    return bounceRecyclerView;
}
Also used : OnWXScrollListener(com.taobao.weex.common.OnWXScrollListener) ImageView(android.widget.ImageView) WXRecyclerView(com.taobao.weex.ui.view.listview.WXRecyclerView) View(android.view.View) RecyclerView(android.support.v7.widget.RecyclerView) Point(android.graphics.Point) ListBaseViewHolder(com.taobao.weex.ui.view.listview.adapter.ListBaseViewHolder) RecyclerViewBaseAdapter(com.taobao.weex.ui.view.listview.adapter.RecyclerViewBaseAdapter) WXRecyclerView(com.taobao.weex.ui.view.listview.WXRecyclerView) RecyclerView(android.support.v7.widget.RecyclerView) List(java.util.List) ArrayList(java.util.ArrayList) ViewTreeObserver(android.view.ViewTreeObserver) TargetApi(android.annotation.TargetApi)

Example 2 with RecyclerViewBaseAdapter

use of com.taobao.weex.ui.view.listview.adapter.RecyclerViewBaseAdapter in project incubator-weex by apache.

the class WXRecyclerTemplateList method initComponentHostView.

@Override
protected BounceRecyclerView initComponentHostView(@NonNull Context context) {
    final BounceRecyclerView bounceRecyclerView = new BounceRecyclerView(context, mLayoutType, mColumnCount, mColumnGap, getOrientation());
    WXAttr attrs = getDomObject().getAttrs();
    String transforms = (String) attrs.get(Constants.Name.TRANSFORM);
    if (transforms != null) {
        bounceRecyclerView.getInnerView().addItemDecoration(RecyclerTransform.parseTransforms(getOrientation(), transforms));
    }
    mItemAnimator = bounceRecyclerView.getInnerView().getItemAnimator();
    if (attrs.get(NAME_TEMPLATE_CACHE_SIZE) != null) {
        templateCacheSize = WXUtils.getInteger(attrs.get(NAME_TEMPLATE_CACHE_SIZE), templateCacheSize);
    }
    boolean hasFixedSize = false;
    int itemViewCacheSize = 2;
    if (attrs.get(NAME_ITEM_VIEW_CACHE_SIZE) != null) {
        itemViewCacheSize = WXUtils.getNumberInt(getDomObject().getAttrs().get(NAME_ITEM_VIEW_CACHE_SIZE), itemViewCacheSize);
    }
    if (attrs.get(NAME_HAS_FIXED_SIZE) != null) {
        hasFixedSize = WXUtils.getBoolean(attrs.get(NAME_HAS_FIXED_SIZE), hasFixedSize);
    }
    RecyclerViewBaseAdapter recyclerViewBaseAdapter = new RecyclerViewBaseAdapter<>(this);
    recyclerViewBaseAdapter.setHasStableIds(true);
    bounceRecyclerView.getInnerView().setItemAnimator(null);
    if (itemViewCacheSize != 2) {
        bounceRecyclerView.getInnerView().setItemViewCacheSize(itemViewCacheSize);
    }
    if (bounceRecyclerView.getSwipeLayout() != null) {
        if (WXUtils.getBoolean(getDomObject().getAttrs().get("nestedScrollingEnabled"), false)) {
            bounceRecyclerView.getSwipeLayout().setNestedScrollingEnabled(true);
        }
    }
    bounceRecyclerView.getInnerView().setHasFixedSize(hasFixedSize);
    bounceRecyclerView.setRecyclerViewBaseAdapter(recyclerViewBaseAdapter);
    bounceRecyclerView.setOverScrollMode(View.OVER_SCROLL_NEVER);
    bounceRecyclerView.getInnerView().clearOnScrollListeners();
    bounceRecyclerView.getInnerView().addOnScrollListener(mViewOnScrollListener);
    bounceRecyclerView.getInnerView().addOnScrollListener(new RecyclerView.OnScrollListener() {

        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            List<OnWXScrollListener> listeners = getInstance().getWXScrollListeners();
            if (listeners != null && listeners.size() > 0) {
                for (OnWXScrollListener listener : listeners) {
                    if (listener != null) {
                        View topView = recyclerView.getChildAt(0);
                        if (topView != null) {
                            int y = topView.getTop();
                            listener.onScrollStateChanged(recyclerView, 0, y, newState);
                        }
                    }
                }
            }
        }

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            List<OnWXScrollListener> listeners = getInstance().getWXScrollListeners();
            if (listeners != null && listeners.size() > 0) {
                try {
                    for (OnWXScrollListener listener : listeners) {
                        if (listener != null) {
                            if (listener instanceof ICheckBindingScroller) {
                                if (((ICheckBindingScroller) listener).isNeedScroller(getRef(), null)) {
                                    listener.onScrolled(recyclerView, dx, dy);
                                }
                            } else {
                                listener.onScrolled(recyclerView, dx, dy);
                            }
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    });
    bounceRecyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

        @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
        @Override
        public void onGlobalLayout() {
            BounceRecyclerView view;
            if ((view = getHostView()) == null)
                return;
            mViewOnScrollListener.onScrolled(view.getInnerView(), 0, 0);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            } else {
                view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            }
        }
    });
    listUpdateRunnable = new Runnable() {

        @Override
        public void run() {
            /**
             * compute sticky position
             */
            if (mStickyHelper != null) {
                if (mStickyHelper.getStickyTypes().size() > 0) {
                    mStickyHelper.getStickyPositions().clear();
                    if (cellDataManager.listData != null) {
                        for (int i = 0; i < cellDataManager.listData.size(); i++) {
                            WXCell cell = getSourceTemplate(i);
                            if (cell == null) {
                                continue;
                            }
                            if (cell.isSticky()) {
                                mStickyHelper.getStickyPositions().add(i);
                            }
                        }
                    }
                }
            }
            if (getHostView() != null && getHostView().getRecyclerViewBaseAdapter() != null) {
                getHostView().getRecyclerViewBaseAdapter().notifyDataSetChanged();
            }
            if (WXEnvironment.isOpenDebugLog() && ENABLE_TRACE_LOG) {
                WXLogUtils.d(TAG, "WXTemplateList notifyDataSetChanged");
            }
        }
    };
    return bounceRecyclerView;
}
Also used : BounceRecyclerView(com.taobao.weex.ui.view.refresh.wrapper.BounceRecyclerView) ICheckBindingScroller(com.taobao.weex.common.ICheckBindingScroller) OnWXScrollListener(com.taobao.weex.common.OnWXScrollListener) WXRecyclerView(com.taobao.weex.ui.view.listview.WXRecyclerView) View(android.view.View) RecyclerView(android.support.v7.widget.RecyclerView) BounceRecyclerView(com.taobao.weex.ui.view.refresh.wrapper.BounceRecyclerView) Point(android.graphics.Point) WXCell(com.taobao.weex.ui.component.list.WXCell) RecyclerViewBaseAdapter(com.taobao.weex.ui.view.listview.adapter.RecyclerViewBaseAdapter) WXRecyclerView(com.taobao.weex.ui.view.listview.WXRecyclerView) RecyclerView(android.support.v7.widget.RecyclerView) BounceRecyclerView(com.taobao.weex.ui.view.refresh.wrapper.BounceRecyclerView) List(java.util.List) ArrayList(java.util.ArrayList) ViewTreeObserver(android.view.ViewTreeObserver) TargetApi(android.annotation.TargetApi) WXAttr(com.taobao.weex.dom.WXAttr)

Example 3 with RecyclerViewBaseAdapter

use of com.taobao.weex.ui.view.listview.adapter.RecyclerViewBaseAdapter in project incubator-weex by apache.

the class BasicListComponent method initComponentHostView.

@Override
protected T initComponentHostView(@NonNull Context context) {
    T bounceRecyclerView = generateListView(context, getOrientation());
    String transforms = (String) getDomObject().getAttrs().get(TRANSFORM);
    if (transforms != null) {
        bounceRecyclerView.getInnerView().addItemDecoration(RecyclerTransform.parseTransforms(getOrientation(), transforms));
    }
    if (getDomObject().getAttrs().get(Constants.Name.KEEP_POSITION_LAYOUT_DELAY) != null) {
        keepPositionLayoutDelay = WXUtils.getNumberInt(getDomObject().getAttrs().get(Constants.Name.KEEP_POSITION_LAYOUT_DELAY), (int) keepPositionLayoutDelay);
    }
    if (getDomObject().getAttrs().get("appearActionDelay") != null) {
        mAppearDelay = WXUtils.getNumberInt(getDomObject().getAttrs().get("appearActionDelay"), (int) mAppearDelay);
    }
    mItemAnimator = bounceRecyclerView.getInnerView().getItemAnimator();
    RecyclerViewBaseAdapter recyclerViewBaseAdapter = new RecyclerViewBaseAdapter<>(this);
    recyclerViewBaseAdapter.setHasStableIds(true);
    bounceRecyclerView.setRecyclerViewBaseAdapter(recyclerViewBaseAdapter);
    bounceRecyclerView.setOverScrollMode(View.OVER_SCROLL_NEVER);
    bounceRecyclerView.getInnerView().clearOnScrollListeners();
    bounceRecyclerView.getInnerView().addOnScrollListener(mViewOnScrollListener);
    if (getDomObject().getAttrs().get(Constants.Name.HAS_FIXED_SIZE) != null) {
        boolean hasFixedSize = WXUtils.getBoolean(getDomObject().getAttrs().get(Constants.Name.HAS_FIXED_SIZE), false);
        bounceRecyclerView.getInnerView().setHasFixedSize(hasFixedSize);
    }
    bounceRecyclerView.getInnerView().addOnScrollListener(new RecyclerView.OnScrollListener() {

        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            List<OnWXScrollListener> listeners = getInstance().getWXScrollListeners();
            if (listeners != null && listeners.size() > 0) {
                for (OnWXScrollListener listener : listeners) {
                    if (listener != null) {
                        View topView = recyclerView.getChildAt(0);
                        if (topView != null) {
                            int y = topView.getTop();
                            listener.onScrollStateChanged(recyclerView, 0, y, newState);
                        }
                    }
                }
            }
        }

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            List<OnWXScrollListener> listeners = getInstance().getWXScrollListeners();
            if (listeners != null && listeners.size() > 0) {
                try {
                    for (OnWXScrollListener listener : listeners) {
                        if (listener != null) {
                            if (listener instanceof ICheckBindingScroller) {
                                if (((ICheckBindingScroller) listener).isNeedScroller(getRef(), null)) {
                                    listener.onScrolled(recyclerView, dx, dy);
                                }
                            } else {
                                listener.onScrolled(recyclerView, dx, dy);
                            }
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    });
    bounceRecyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

        @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
        @Override
        public void onGlobalLayout() {
            T view;
            if ((view = getHostView()) == null)
                return;
            mViewOnScrollListener.onScrolled(view.getInnerView(), 0, 0);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            } else {
                view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            }
        }
    });
    return bounceRecyclerView;
}
Also used : ICheckBindingScroller(com.taobao.weex.common.ICheckBindingScroller) OnWXScrollListener(com.taobao.weex.common.OnWXScrollListener) WXRecyclerView(com.taobao.weex.ui.view.listview.WXRecyclerView) View(android.view.View) RecyclerView(android.support.v7.widget.RecyclerView) BounceRecyclerView(com.taobao.weex.ui.view.refresh.wrapper.BounceRecyclerView) Point(android.graphics.Point) RecyclerViewBaseAdapter(com.taobao.weex.ui.view.listview.adapter.RecyclerViewBaseAdapter) WXRecyclerView(com.taobao.weex.ui.view.listview.WXRecyclerView) RecyclerView(android.support.v7.widget.RecyclerView) BounceRecyclerView(com.taobao.weex.ui.view.refresh.wrapper.BounceRecyclerView) List(java.util.List) ArrayList(java.util.ArrayList) ViewTreeObserver(android.view.ViewTreeObserver) TargetApi(android.annotation.TargetApi)

Aggregations

TargetApi (android.annotation.TargetApi)3 Point (android.graphics.Point)3 RecyclerView (android.support.v7.widget.RecyclerView)3 View (android.view.View)3 ViewTreeObserver (android.view.ViewTreeObserver)3 OnWXScrollListener (com.taobao.weex.common.OnWXScrollListener)3 WXRecyclerView (com.taobao.weex.ui.view.listview.WXRecyclerView)3 RecyclerViewBaseAdapter (com.taobao.weex.ui.view.listview.adapter.RecyclerViewBaseAdapter)3 ArrayList (java.util.ArrayList)3 List (java.util.List)3 ICheckBindingScroller (com.taobao.weex.common.ICheckBindingScroller)2 BounceRecyclerView (com.taobao.weex.ui.view.refresh.wrapper.BounceRecyclerView)2 ImageView (android.widget.ImageView)1 WXAttr (com.taobao.weex.dom.WXAttr)1 WXCell (com.taobao.weex.ui.component.list.WXCell)1 ListBaseViewHolder (com.taobao.weex.ui.view.listview.adapter.ListBaseViewHolder)1