引入依賴
去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的框架部分,但是達到了你想要的目的,喜歡的點個贊,價格關注吧!幫我加加油打打氣