feat:Fix Flowlayout call onLoadMore multi times
This commit is contained in:
parent
112e45af06
commit
2de59a307f
@ -45,6 +45,7 @@ class FlowAdapter extends RecyclerView.Adapter<FlowAdapter.DoricViewHolder> {
|
|||||||
int itemCount = 0;
|
int itemCount = 0;
|
||||||
int batchCount = 15;
|
int batchCount = 15;
|
||||||
SparseArray<String> itemValues = new SparseArray<>();
|
SparseArray<String> itemValues = new SparseArray<>();
|
||||||
|
private int loadAnchor = 0;
|
||||||
|
|
||||||
FlowAdapter(FlowLayoutNode flowLayoutNode) {
|
FlowAdapter(FlowLayoutNode flowLayoutNode) {
|
||||||
this.flowLayoutNode = flowLayoutNode;
|
this.flowLayoutNode = flowLayoutNode;
|
||||||
@ -66,9 +67,8 @@ class FlowAdapter extends RecyclerView.Adapter<FlowAdapter.DoricViewHolder> {
|
|||||||
holder.flowLayoutItemNode.setId(jsObject.getProperty("id").asString().value());
|
holder.flowLayoutItemNode.setId(jsObject.getProperty("id").asString().value());
|
||||||
holder.flowLayoutItemNode.blend(jsObject.getProperty("props").asObject());
|
holder.flowLayoutItemNode.blend(jsObject.getProperty("props").asObject());
|
||||||
}
|
}
|
||||||
if (position >= this.itemCount) {
|
if (position >= this.itemCount && !TextUtils.isEmpty(this.flowLayoutNode.onLoadMoreFuncId)) {
|
||||||
this.flowLayoutNode.callJSResponse(this.flowLayoutNode.onLoadMoreFuncId);
|
callLoadMore();
|
||||||
|
|
||||||
StaggeredGridLayoutManager.LayoutParams layoutParams = new StaggeredGridLayoutManager.LayoutParams(
|
StaggeredGridLayoutManager.LayoutParams layoutParams = new StaggeredGridLayoutManager.LayoutParams(
|
||||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
holder.itemView.getLayoutParams().height
|
holder.itemView.getLayoutParams().height
|
||||||
@ -143,6 +143,14 @@ class FlowAdapter extends RecyclerView.Adapter<FlowAdapter.DoricViewHolder> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void callLoadMore() {
|
||||||
|
if (loadAnchor != itemCount) {
|
||||||
|
loadAnchor = itemCount;
|
||||||
|
this.flowLayoutNode.callJSResponse(this.flowLayoutNode.onLoadMoreFuncId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static class DoricViewHolder extends RecyclerView.ViewHolder {
|
static class DoricViewHolder extends RecyclerView.ViewHolder {
|
||||||
FlowLayoutItemNode flowLayoutItemNode;
|
FlowLayoutItemNode flowLayoutItemNode;
|
||||||
|
|
||||||
|
@ -158,6 +158,7 @@ @interface DoricFlowLayoutNode () <UICollectionViewDataSource, UICollectionViewD
|
|||||||
@property(nonatomic, copy) NSString *onScrollFuncId;
|
@property(nonatomic, copy) NSString *onScrollFuncId;
|
||||||
@property(nonatomic, copy) NSString *onScrollEndFuncId;
|
@property(nonatomic, copy) NSString *onScrollEndFuncId;
|
||||||
@property(nonatomic, strong) DoricJSDispatcher *jsDispatcher;
|
@property(nonatomic, strong) DoricJSDispatcher *jsDispatcher;
|
||||||
|
@property(nonatomic, assign) NSUInteger loadAnchor;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation DoricFlowLayoutNode
|
@implementation DoricFlowLayoutNode
|
||||||
@ -298,6 +299,14 @@ - (void)callItem:(NSUInteger)position size:(CGSize)size {
|
|||||||
[self.view.collectionViewLayout invalidateLayout];
|
[self.view.collectionViewLayout invalidateLayout];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (void)callLoadMore {
|
||||||
|
if (self.itemCount != self.loadAnchor) {
|
||||||
|
self.loadAnchor = self.itemCount;
|
||||||
|
[self callJSResponse:self.onLoadMoreFuncId, nil];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
|
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
|
||||||
return self.itemCount + (self.loadMore ? 1 : 0);
|
return self.itemCount + (self.loadMore ? 1 : 0);
|
||||||
}
|
}
|
||||||
@ -320,7 +329,7 @@ - (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collection
|
|||||||
[node blend:props];
|
[node blend:props];
|
||||||
node.view.width = (collectionView.width - (self.columnCount - 1) * self.columnSpace) / self.columnCount;
|
node.view.width = (collectionView.width - (self.columnCount - 1) * self.columnSpace) / self.columnCount;
|
||||||
if (position > 0 && position >= self.itemCount && self.onLoadMoreFuncId) {
|
if (position > 0 && position >= self.itemCount && self.onLoadMoreFuncId) {
|
||||||
[self callJSResponse:self.onLoadMoreFuncId, nil];
|
[self callLoadMore];
|
||||||
}
|
}
|
||||||
[node.view.doricLayout apply];
|
[node.view.doricLayout apply];
|
||||||
[node requestLayout];
|
[node requestLayout];
|
||||||
|
Reference in New Issue
Block a user