WEEX-EEUI 使用SmartRefreshLayout 替换原SwipeRefreshLayout

本文介绍了如何在WEEX-EEUI项目中,通过引入新的依赖并创建自定义的scrollview实现类SWRecyler,用SmartRefreshLayout替代原生的SwipeRefreshLayout。教程包括修改build.gradle文件添加配置、复制并重命名Recycler为SWRecyler,以及调整组件注册位置。这种方法虽非最佳实践,但能有效达成目标。欢迎点赞和关注以支持作者。

引入依赖

去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, pa
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值