引入依赖
去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

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

被折叠的 条评论
为什么被折叠?



