WEEX-EEUI 使用SmartRefreshLayout 替換原SwipeRefreshLayout

引入依賴

去eeui庫目錄下的build.gradle文件中添加下面配置如圖

implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.2'

在這裏插入圖片描述

創建的scrollview實現類

在這裏插入圖片描述
這裏爲了方便起見,直接複製Recycler,重命名SWRecyler
SWRecyler.java

public class SWRecyler extends WXVContainer<ViewGroup> implements OnRefreshListener, OnLoadMoreListener {

    private static final String TAG = "SWRecyler";

    private View mView;

//    private SwipeRefreshLayout smartRefreshLayout;
//    private RecyclerView recyclerView;
    /**
     * 懸浮佈局添加
     */
    private FrameLayout v_header;
    /**
     * 上拉加載下拉刷新
     */
    private SmartRefreshLayout smartRefreshLayout;
    /**
     * 列表
     */
    private RecyclerView recyclerView;

    /**
     * 是否開啓刷新
     */
    private boolean isSwipeRefresh;
    /**
     * 是否自動刷新
     */
    private boolean isRefreshAuto;

    private int footIdentify;
    /**
     * 最後可見條目位置
     */
    private int lastVisibleItem = 0;

    private int refreshIdentify;
//    private int refreshStart = 0;
//    private int refreshEnd = 0;

    /**
     * 還有更多數據
     */
    private boolean hasMore = false;
    private boolean isLoading = false;
    private boolean isRefreshing = false;
    private boolean isHeaderFloat = false;

    /**
     * 網格佈局
     */
    private GridLayoutManager mLayoutManager;
    /**
     * 適配器
     */
    private SWRecylerAdapter mAdapter;
    /**
     * 列表更新回調
     */
    private Runnable listUpdateRunnable;
    private Handler mHandler = new Handler();
    private ViewGroup headerViewGroup;

    /**
     * 目標項是否在最後一個可見項之後
     */
    private boolean mShouldScroll;
    /**
     * 記錄目標項位置
     */
    private int mToPosition;

    public SWRecyler(WXSDKInstance instance, WXVContainer parent, BasicComponentData basicComponentData) {
        super(instance, parent, basicComponentData);
    }

    @Override
    protected ViewGroup initComponentHostView(@NonNull Context context) {
        mView = ((Activity) context).getLayoutInflater().inflate(R.layout.layout_eeui_swrecyler, null);
        initPagerView();

        listUpdateRunnable = () -> {
            if (getHostView() != null && mAdapter != null) {
                mAdapter.notifyDataSetChanged();
            }
        };

        formatAttrs(getAttrs());
        if (isRefreshAuto) {
            smartRefreshLayout.post(new Runnable() {
                @Override
                public void run() {
                    smartRefreshLayout.autoRefresh();

                }
            });

        }

        if (getEvents().contains(eeuiConstants.Event.READY)) {
            fireEvent(eeuiConstants.Event.READY, null);
        }

        return (ViewGroup) mView;
    }

    private void formatAttrs(Map<String, Object> attr) {
        if (attr != null) {
            for (String key : attr.keySet()) {
                Object value = attr.get(key);
                switch (eeuiCommon.camelCaseName(key)) {
                    case "eeui":
                        JSONObject json = eeuiJson.parseObject(eeuiParse.parseStr(value, null));
                        if (json.size() > 0) {
                            Map<String, Object> data = new HashMap<>();
                            for (Map.Entry<String, Object> entry : json.entrySet()) {
                                data.put(entry.getKey(), entry.getValue());
                            }
                            formatAttrs(data);
                        }
                        break;

                    case "refreshAuto":
                        isRefreshAuto = eeuiParse.parseBool(value);
                        break;
                }
            }
        }
    }

    @Override
    public void addSubView(View view, int index) {
        if (view == null || mAdapter == null) {
            return;
        }
        if (view instanceof ScrollHeaderView) {
            ViewGroup parentViewGroup = (ViewGroup) view.getParent();
            if (parentViewGroup != null) {
                parentViewGroup.removeView(view);
            }
            ScrollHeaderView temp = new ScrollHeaderView(getContext());
            temp.addView(view);
            temp.setLayoutParams(view.getLayoutParams());
            mAdapter.updateList(index, new ViewItem(temp), hasMore);
            isHeaderFloat = true;
        } else {
            mAdapter.updateList(index, new ViewItem(view), hasMore);
        }
        mAdapter.notifyItemInserted(index);
        notifyUpdateFoot();
    }

    @Override
    public void remove(WXComponent child, boolean destroy) {
        if (child == null || child.getHostView() == null || mAdapter == null) {
            return;
        }
        View view = child.getHostView();
        if (view instanceof ScrollHeaderView) {
            view = (View) view.getParent();
            if (view == v_header) {
                view = headerViewGroup;
            }
        }
        mAdapter.removeList(view, hasMore);
        removeHeaderIndex(view);
        notifyUpdateList();
        super.remove(child, destroy);
    }

    @Override
    public ViewGroup.LayoutParams getChildLayoutParams(WXComponent child, View childView, int width, int height, int left, int right, int top, int bottom) {
        ViewGroup.LayoutParams lp = childView == null ? null : childView.getLayoutParams();
        if (lp == null) {
            lp = new FrameLayout.LayoutParams(width, height);
        } else {
            lp.width = width;
            lp.height = height;
        }
        if (lp instanceof ViewGroup.MarginLayoutParams) {
            top = eeuiScreenUtils.weexDp2px(getInstance(), child.getMargin().get(CSSShorthand.EDGE.TOP));
            top = eeuiScreenUtils.weexPx2dp(getInstance(), top, 0);
            ((ViewGroup.MarginLayoutParams) lp).setMargins(left, top, right, bottom);
        }
        return lp;
    }

    @Override
    public void destroy() {
        if (getHostView() != null) {
            getHostView().removeCallbacks(listUpdateRunnable);
        }
        super.destroy();
    }


    @Override
    protected boolean setProperty(String key, Object param) {
        return initProperty(key, param) || super.setProperty(key, param);
    }

    private boolean initProperty(String key, Object val) {
        switch (eeuiCommon.camelCaseName(key)) {
            case "eeui":
                JSONObject json = eeuiJson.parseObject(eeuiParse.parseStr(val, ""));
                if (json.size() > 0) {
                    for (Map.Entry<String, Object> entry : json.entrySet()) {
                        initProperty(entry.getKey(), entry.getValue());
                    }
                }
                return true;

            case "pullTips":
                mAdapter.setPullTips(eeuiParse.parseBool(val, true) && getEvents().contains(eeuiConstants.Event.PULLLOAD_LISTENER));
                return true;

            case "pullTipsDefault":
                mAdapter.setPullTipsDefault(eeuiParse.parseStr(val, ""));
                return true;

            case "pullTipsLoad":
                mAdapter.setPullTipsLoad(eeuiParse.parseStr(val, ""));
                return true;

            case "pullTipsNo":
                mAdapter.setPullTipsNo(eeuiParse.parseStr(val, ""));
                return true;

            case "itemDefaultAnimator":
                itemDefaultAnimator(eeuiParse.parseBool(val, false));
                return true;

            case "scrollBarEnabled":
                scrollBarEnabled(eeuiParse.parseBool(val, false));
                return true;

            default:
                return false;
        }
    }

    private void initPagerView() {
        smartRefreshLayout = mView.findViewById(R.id.smartRefreshLayout);
        recyclerView = mView.findViewById(R.id.recyclerView);
        v_header = mView.findViewById(R.id.v_header);
        smartRefreshLayout.setOnRefreshListener(this);
        smartRefreshLayout.setOnLoadMoreListener(this);
        if (getEvents().contains(eeuiConstants.Event.REFRESH_LISTENER)) {
            isSwipeRefresh = true;
            smartRefreshLayout.setEnabled(true);
        } else {
            isSwipeRefresh = false;
            smartRefreshLayout.setEnabled(false);
        }
        if (getEvents().contains(eeuiConstants.Event.PULLLOAD_LISTENER)) {
            isLoading = true;
            smartRefreshLayout.setEnableLoadMore(true);
        } else {
            isLoading = false;
            smartRefreshLayout.setEnableLoadMore(false);
        }

        mAdapter = new SWRecylerAdapter(getContext());
        mLayoutManager = new GridLayoutManager(getContext(), 1);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(mLayoutManager);
        recyclerView.setAdapter(mAdapter);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        itemDefaultAnimator(false);
        scrollBarEnabled(false);
        recyclerView.addOnScrollListener(new RecylerOnBottomScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                if (mShouldScroll && RecyclerView.SCROLL_STATE_IDLE == newState) {
                    mShouldScroll = false;
                    smoothMoveToPosition(mToPosition);
                }
                if (getEvents().contains(eeuiConstants.Event.SCROLL_STATE_CHANGED)) {
                    Map<String, Object> data = new HashMap<>();
                    data.put("x", recyclerView.computeHorizontalScrollOffset());
                    data.put("y", recyclerView.computeVerticalScrollOffset());
                    data.put("newState", newState);
                    fireEvent(eeuiConstants.Event.SCROLL_STATE_CHANGED, data);
                }
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                loadHeaderIndex(mLayoutManager.findFirstVisibleItemPosition());
                lastVisibleItem = mLayoutManager.findLastVisibleItemPosition();
                if (getEvents().contains(eeuiConstants.Event.SCROLLED)) {
                    Map<String, Object> data = new HashMap<>();
                    data.put("x", recyclerView.computeHorizontalScrollOffset());
                    data.put("y", recyclerView.computeVerticalScrollOffset());
                    data.put("dx", dx);
                    data.put("dy", dy);
                    fireEvent(eeuiConstants.Event.SCROLLED, data);
                }
            }

        });
        mAdapter.setOnItemClickListener(new SWRecylerAdapter.OnItemClickListener() {
            @Override
            public void onClick(int position) {
                if (getEvents().contains(eeuiConstants.Event.ITEM_CLICK)) {
                    Map<String, Object> data = new HashMap<>();
                    data.put("position", position);
                    fireEvent(eeuiConstants.Event.ITEM_CLICK, data);
                }
            }

            @Override
            public void onLongClick(int position) {
                if (getEvents().contains(eeuiConstants.Event.ITEM_LONG_CLICK)) {
                    Map<String, Object> data = new HashMap<>();
                    data.put("position", position);
                    fireEvent(eeuiConstants.Event.ITEM_LONG_CLICK, data);
                }
            }
        });
    }

    private void notifyUpdateList() {
        if (getHostView() == null || listUpdateRunnable == null) {
            return;
        }
        if (Looper.getMainLooper().getThread().getId() != Thread.currentThread().getId()) {
            getHostView().removeCallbacks(listUpdateRunnable);
            getHostView().post(listUpdateRunnable);
        } else {
            listUpdateRunnable.run();
        }
    }

    private void notifyUpdateFoot() {
//        footIdentify++;
//        int tempId = footIdentify;
//        mHandler.postDelayed(()-> {
//            if (tempId == footIdentify) {
//                recyclerView.post(()-> {
//                    if (getHostView() != null && mAdapter != null) {
//                        mAdapter.notifyItemChanged(mAdapter.getItemCount() - 1);
//                        loadHeaderIndex(mLayoutManager.findFirstVisibleItemPosition());
//                    }
//                });
//            }
//        }, 100);
    }


    /**
     * 頂部懸浮相關
     *
     * @param firstPos
     */
    private void loadHeaderIndex(int firstPos) {
        if (!isHeaderFloat) {
            return;
        }
        ViewItem item = null;
        int index;
        for (index = mAdapter.getItemCount() - 1; index >= 0; --index) {
            if (index > firstPos) {
                continue;
            }
            ViewItem temp = mAdapter.getItemView(index);
            if (temp.isScrollHeader()) {
                item = temp;
                break;
            }
        }
        if (item == null) {
            removeHeaderIndex();
            return;
        }
        if (item.getView() instanceof ScrollHeaderView && ((ScrollHeaderView) item.getView()).getChildCount() > 0) {
            removeHeaderIndex();
            headerViewGroup = (ViewGroup) item.getView();
            if (index == 0 && !item.isPost()) {
                ViewItem finalItem = item;
                headerViewGroup.post(() -> {
                    for (int i = 0; i < headerViewGroup.getChildCount(); i++) {
                        View temp = headerViewGroup.getChildAt(i);
                        if (temp instanceof ScrollHeaderView) {
                            ((ScrollHeaderView) temp).stateChanged("float");
                        }
                        headerViewGroup.removeView(temp);
                        v_header.addView(temp);
                    }
                    finalItem.setPost(true);
                });
            } else {
                for (int i = 0; i < headerViewGroup.getChildCount(); i++) {
                    View temp = headerViewGroup.getChildAt(i);
                    if (temp instanceof ScrollHeaderView) {
                        ((ScrollHeaderView) temp).stateChanged("float");
                    }
                    headerViewGroup.removeView(temp);
                    v_header.addView(temp);
                }
            }
            notifyHeaderIndex();
        }
    }

    /**
     * 頂部懸浮相關
     */
    private void removeHeaderIndex() {
        if (!isHeaderFloat) {
            return;
        }
        if (headerViewGroup == null) {
            return;
        }
        for (int i = 0; i < v_header.getChildCount(); i++) {
            View temp = v_header.getChildAt(i);
            if (temp instanceof ScrollHeaderView) {
                ((ScrollHeaderView) temp).stateChanged("static");
            }
            v_header.removeView(temp);
            headerViewGroup.addView(temp);
        }
        headerViewGroup = null;
        notifyHeaderIndex();
    }

    /**
     * 頂部懸浮相關
     *
     * @param view
     */
    private void removeHeaderIndex(View view) {
        if (!isHeaderFloat) {
            return;
        }
        if (view == headerViewGroup) {
            removeHeaderIndex();
            loadHeaderIndex(mLayoutManager.findFirstVisibleItemPosition());
        }
    }

    /**
     * 頂部懸浮相關
     */
    private void notifyHeaderIndex() {
        if (isSwipeRefresh) {
            return;
        }
        refreshIdentify++;
        int tempId = refreshIdentify;
        mHandler.postDelayed(() -> {
            if (tempId == refreshIdentify) {
//                v_header.post(()-> {
//                    int h = v_header.getMeasuredHeight();
//                    smartRefreshLayout.setProgressViewOffset(false, refreshStart + h, refreshStart + refreshEnd + h);
//                });
            }
        }, 300);
    }

    /**
     * 滑動到指定位置,並指定位置在頂部
     *
     * @param position
     */
    private void smoothMoveToPosition(final int position) {
        // 第一個可見位置
        int firstItem = recyclerView.getChildLayoutPosition(recyclerView.getChildAt(0));
        // 最後一個可見位置
        int lastItem = recyclerView.getChildLayoutPosition(recyclerView.getChildAt(recyclerView.getChildCount() - 1));
        if (position < firstItem) {
            // 第一種可能:跳轉位置在第一個可見位置之前
            recyclerView.smoothScrollToPosition(position);
        } else if (position <= lastItem) {
            // 第二種可能:跳轉位置在第一個可見位置之後
            int movePosition = position - firstItem;
            if (movePosition >= 0 && movePosition < recyclerView.getChildCount()) {
                int top = recyclerView.getChildAt(movePosition).getTop();
                recyclerView.smoothScrollBy(0, top);
            }
        } else {
            // 第三種可能:跳轉位置在最後可見項之後
            recyclerView.smoothScrollToPosition(position);
            mToPosition = position;
            mShouldScroll = true;
        }
    }


    /**
     * 設置下拉刷新狀態
     *
     * @param var
     */
    @JSMethod
    public void setRefreshing(boolean var) {

        if (var) {
            if (smartRefreshLayout.getState() != RefreshState.Refreshing) {
                onRefresh(smartRefreshLayout);
            }
        } else {
            isLoading = false;
            smartRefreshLayout.post(() -> {
                isRefreshing = false;
                smartRefreshLayout.finishRefresh();
            });
        }
    }

    /**
     * 下拉刷新結束標記
     */
    @JSMethod
    public void refreshed() {
        isLoading = false;
        smartRefreshLayout.post(() -> {
            isRefreshing = false;
            smartRefreshLayout.setEnableLoadMore(true);
            smartRefreshLayout.finishRefresh();
        });
    }

    /**
     * 設置下拉刷新是否可用
     */
    @JSMethod
    public void refreshEnabled(boolean enabled) {
        isSwipeRefresh = enabled;
        smartRefreshLayout.setEnabled(enabled);
    }

    /**
     * 設置是否有上拉加載更多的數據
     *
     * @param var
     */
    @JSMethod
    public void setHasMore(boolean var) {

        hasMore = var;
        if (var) {
            smartRefreshLayout.finishLoadMore();
        } else {
            smartRefreshLayout.finishLoadMoreWithNoMoreData();
        }
    }

    /**
     * 上拉加載結束標記
     */
    @JSMethod
    public void pullloaded() {
        isLoading = false;
        smartRefreshLayout.finishLoadMore();
    }

    /**
     * 打開關閉局部刷新默認動畫
     */
    @JSMethod
    public void itemDefaultAnimator(boolean open) {
        if (recyclerView != null) {
            RecyclerView.ItemAnimator m = recyclerView.getItemAnimator();
            if (m == null) {
                return;
            }
            if (open) {
                m.setAddDuration(120);
                m.setChangeDuration(250);
                m.setMoveDuration(250);
                m.setRemoveDuration(120);
                ((SimpleItemAnimator) m).setSupportsChangeAnimations(true);
            } else {
                m.setAddDuration(0);
                m.setChangeDuration(0);
                m.setMoveDuration(0);
                m.setRemoveDuration(0);
                ((SimpleItemAnimator) m).setSupportsChangeAnimations(false);
            }
        }
    }

    /**
     * 顯隱滾動條
     *
     * @param enabled
     */
    @JSMethod
    public void scrollBarEnabled(boolean enabled) {
        if (recyclerView != null) {
            recyclerView.setVerticalScrollBarEnabled(enabled);
        }
    }

    /**
     * 滾動到指定位置
     */
    @JSMethod
    public void scrollToPosition(int position) {
        if (recyclerView != null && mAdapter != null) {
            if (position == -1) {
                position = mAdapter.getItemCount() - 1;
            }
            recyclerView.scrollToPosition(position);
            //
            LinearLayoutManager mLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
            if (mLayoutManager != null) {
                mLayoutManager.scrollToPositionWithOffset(position, 0);
            }
        }
    }

    /**
     * 平滑滾動到指定位置
     */
    @JSMethod
    public void smoothScrollToPosition(int position) {
        if (recyclerView != null && mAdapter != null) {
            if (position == -1) {
                position = mAdapter.getItemCount() - 1;
            }
            smoothMoveToPosition(position);
        }
    }

    @Override
    public void onRefresh(@NonNull RefreshLayout refreshLayout) {
        isLoading = true;
        isRefreshing = true;
        smartRefreshLayout.autoRefresh();

        if (getEvents().contains(eeuiConstants.Event.REFRESH_LISTENER)) {
            Map<String, Object> data = new HashMap<>();
            data.put("realLastPosition", mAdapter.getRealLastPosition());
            data.put("lastVisibleItem", lastVisibleItem);
            fireEvent(eeuiConstants.Event.REFRESH_LISTENER, data);
        }
    }

    @Override
    public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
        isLoading = true;
        if (hasMore) {
            if (getEvents().contains(eeuiConstants.Event.PULLLOAD_LISTENER)) {
                Map<String, Object> data = new HashMap<>();
                data.put("realLastPosition", mAdapter.getRealLastPosition());
                data.put("lastVisibleItem", lastVisibleItem);
                fireEvent(eeuiConstants.Event.PULLLOAD_LISTENER, data);
            }
        } else {
            mAdapter.updateList(-1, null, false);
            notifyUpdateFoot();
        }
    }
}

SWRecyclerAdapter.java

public class SWRecylerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private static final String TAG = "RecylerAdapter";

    private List<ViewItem> viewDatas = new ArrayList<>();
    private Context context;
    private int normalType = 0;
    private int footType = 1;
    private boolean hasMore = false;
    private boolean fadeFooter = false;
    private OnItemClickListener mOnItemClickListener;

    private boolean pullTips = true;
    private String pullTipsDefault = "正在加載數據...";
    private String pullTipsLoad = "正在加載更多...";
    private String pullTipsNo = "沒有更多數據了";

    public SWRecylerAdapter(Context context) {
        this.context = context;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        if (viewType == normalType) {
            return new NormalHolder(LayoutInflater.from(context).inflate(R.layout.layout_eeui_recyler_item, null));
        } else {
            return new FootHolder(LayoutInflater.from(context).inflate(R.layout.layout_eeui_recyler_footer, null));
        }
    }

    @Override
    public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof NormalHolder) {
            NormalHolder normalHolder = ((NormalHolder) holder);
            ViewItem viewItem = viewDatas.get(position);
            View view = viewItem.getView();
            if (view != null) {
                ViewGroup parentViewGroup = (ViewGroup) view.getParent();
                if (parentViewGroup != null ) {
                    parentViewGroup.removeView(view);
                }
                if (normalHolder.v_container.getChildCount() > 0) {
                    normalHolder.v_container.removeAllViews();
                }
                normalHolder.v_container.addView(view);
            }
        } else if (holder instanceof FootHolder) {
            FootHolder footHolder = ((FootHolder) holder);
            if (!pullTips) {
                fadeFooter = true;
                footHolder.l_footer.setVisibility(View.GONE);
                return;
            }
            //
            footHolder.l_footer.setVisibility(View.VISIBLE);
            if (hasMore) {
                fadeFooter = false;
                footHolder.v_progress.setVisibility(View.VISIBLE);
                String tips = viewDatas.size() > 0 ? pullTipsLoad : pullTipsDefault;
                footHolder.v_tips.setText(tips);
                if (tips.isEmpty()) {
                    footHolder.v_tips.setVisibility(View.GONE);
                }
            } else {
                if (viewDatas.size() > 0) {
                    footHolder.v_progress.setVisibility(View.GONE);
                    footHolder.v_tips.setText(pullTipsNo);
                    if (pullTipsNo.isEmpty() || footHolder.v_tips.getVisibility() == View.GONE) {
                        fadeFooter = true;
                        footHolder.l_footer.setVisibility(View.GONE);
                    }
                }else{
                    fadeFooter = true;
                    footHolder.l_footer.setVisibility(View.GONE);
                }
            }
        }
    }

    @Override
    public int getItemCount() {
        return viewDatas.size();
    }

    @Override
    public int getItemViewType(int position) {
        return normalType;
//        if (position == getItemCount() - 1) {
//            return footType;
//        } else {
//            return normalType;
//        }
    }

    public List<ViewItem> getAllView() {
        return viewDatas;
    }

    public ViewItem getItemView(int position) {
        return viewDatas.get(position);
    }

    class NormalHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
        private FrameLayout v_container;

        NormalHolder(View itemView) {
            super(itemView);
            v_container = itemView.findViewById(R.id.v_container);
            //
            v_container.setOnClickListener(this);
            v_container.setOnLongClickListener(this);
        }

        @Override
        public void onClick(View view) {
            int id = view.getId();
            if (id == R.id.v_container && mOnItemClickListener != null) {
                mOnItemClickListener.onClick(getAdapterPosition());
            }
        }

        @Override
        public boolean onLongClick(View view) {
            int id = view.getId();
            if (id == R.id.v_container) {
                if (mOnItemClickListener != null) {
                    mOnItemClickListener.onLongClick(getAdapterPosition());
                }
            }
            return true;
        }
    }

    class FootHolder extends RecyclerView.ViewHolder {
        private LinearLayout l_footer;
        private ProgressBar v_progress;
        private TextView v_tips;

        FootHolder(View itemView) {
            super(itemView);
            l_footer = itemView.findViewById(R.id.l_footer);
            v_progress = itemView.findViewById(R.id.v_progress);
            v_tips = itemView.findViewById(R.id.v_tips);
            if (pullTips) {
                v_tips.setVisibility(View.VISIBLE);
            }else{
                v_tips.setVisibility(View.GONE);
            }
        }
    }

    public interface OnItemClickListener {
        void onClick(int position);
        void onLongClick(int position);
    }

    public void setOnItemClickListener(OnItemClickListener listener) {
        this.mOnItemClickListener = listener;
    }

    public int getRealLastPosition() {
        return viewDatas.size();
    }

    public void updateList(int index, ViewItem view, boolean hasMore) {
        if (view != null) {
            viewDatas.add(index, view);
        }
        this.hasMore = hasMore;
    }

    public void removeList(View view, boolean hasMore) {
        if (view != null) {
            for (ViewItem item : viewDatas) {
                if (item.getView() == view) {
                    viewDatas.remove(item);
                    break;
                }
            }
        }
        this.hasMore = hasMore;
    }

    public boolean isFadeFooter() {
        return fadeFooter;
    }

    public void setPullTips(boolean var) {
        pullTips = var;
    }

    public void setPullTipsDefault(String var) {
        pullTipsDefault = var;
    }

    public void setPullTipsLoad(String var) {
        pullTipsLoad = var;
    }

    public void setPullTipsNo(String var) {
        pullTipsNo = var;
    }
}

layout_eeui_swrecyler.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.scwang.smartrefresh.layout.SmartRefreshLayout
        android:id="@+id/smartRefreshLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <com.scwang.smartrefresh.layout.header.ClassicsHeader
            android:id="@+id/smartHeader"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <com.scwang.smartrefresh.layout.footer.ClassicsFooter
            android:id="@+id/smartFooter"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </com.scwang.smartrefresh.layout.SmartRefreshLayout>

    <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
        android:id="@+id/v_swipeRefresh"
        android:layout_width="match_parent"
        android:visibility="gone"
        android:layout_height="match_parent">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/v_recyler"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:scrollbars="vertical"/>

    </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>


    <FrameLayout
        android:id="@+id/v_header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">


    </FrameLayout>

</FrameLayout>

當然這裏是有一些冗餘代碼的,如果你想刪除的話可以自己再修改

最後:修改註冊組件的位置

 WXSDKEngine.registerComponent("scroll-view", SWRecyler.class);
//            WXSDKEngine.registerComponent("scroll-view", Recyler.class);

在這裏插入圖片描述

說明

上面的做法雖然不是很好,直接修改了eeui的框架部分,但是達到了你想要的目的,喜歡的點個贊,價格關注吧!幫我加加油打打氣

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章