feat:slider and flowlayout add reload api

This commit is contained in:
pengfei.zhou 2022-08-16 17:57:51 +08:00 committed by osborn
parent 3de2162ef6
commit cce4148240
19 changed files with 262 additions and 22 deletions

View File

@ -15,6 +15,7 @@
*/
package pub.doric.shader.flowlayout;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Rect;
import android.text.TextUtils;
@ -393,6 +394,23 @@ public class FlowLayoutNode extends SuperNode<RecyclerView> implements IDoricScr
return jsonArray;
}
@DoricMethod
public void reload() {
this.flowAdapter.loadAnchor = -1;
// If reload,should reset native cache.
for (int index = 0; index < this.flowAdapter.itemValues.size(); index++) {
removeSubModel(this.flowAdapter.itemValues.valueAt(index));
}
this.flowAdapter.itemValues.clear();
mView.post(new Runnable() {
@SuppressLint("NotifyDataSetChanged")
@Override
public void run() {
flowAdapter.notifyDataSetChanged();
}
});
}
@Override
public void reset() {
super.reset();

View File

@ -295,6 +295,21 @@ public class SliderNode extends SuperNode<RecyclerView> {
}
}
@DoricMethod
public void reload() {
slideAdapter.itemValues.clear();
clearSubModel();
mView.post(new Runnable() {
@SuppressLint("NotifyDataSetChanged")
@Override
public void run() {
slideAdapter.notifyDataSetChanged();
}
});
}
@Override
public void reset() {
super.reset();

View File

@ -549,4 +549,15 @@ - (void)subNodeContentChanged:(DoricViewNode *)subNode {
[subNode.view.doricLayout apply];
[super subNodeContentChanged:subNode];
}
- (void)reload {
self.loadAnchor = -1;
[self.itemViewIds.allValues forEach:^(NSString *obj) {
[self removeSubModel:obj];
}];
[self.itemViewIds removeAllObjects];
dispatch_async(dispatch_get_main_queue(), ^{
[self.view reloadData];
});
}
@end

View File

@ -358,4 +358,12 @@ - (void)subNodeContentChanged:(DoricViewNode *)subNode {
[subNode.view.doricLayout apply];
[super subNodeContentChanged:subNode];
}
- (void)reload {
[self.itemViewIds removeAllObjects];
[self clearSubModel];
dispatch_async(dispatch_get_main_queue(), ^{
[self.view reloadData];
});
}
@end

View File

@ -2503,13 +2503,18 @@ var List = /** @class */ (function (_super) {
List.prototype.findCompletelyVisibleItems = function (context) {
return this.nativeChannel(context, 'findCompletelyVisibleItems')();
};
/**
* Reload all list items.
* @param context
* @returns
*/
List.prototype.reload = function (context) {
return this.nativeChannel(context, 'reload')();
};
List.prototype.reset = function () {
this.cachedViews.clear();
this.itemCount = 0;
};
List.prototype.reload = function (context) {
return this.nativeChannel(context, 'reload')();
};
List.prototype.getItem = function (itemIdx) {
var view = this.renderItem(itemIdx);
view.superview = this;
@ -2660,6 +2665,18 @@ var Slider = /** @class */ (function (_super) {
Slider.prototype.allSubviews = function () {
return this.cachedViews.values();
};
/**
* Reload all list items.
* @param context
* @returns
*/
Slider.prototype.reload = function (context) {
return this.nativeChannel(context, 'reload')();
};
Slider.prototype.reset = function () {
this.cachedViews.clear();
this.itemCount = 0;
};
Slider.prototype.getItem = function (itemIdx) {
var view = this.renderPage(itemIdx);
view.superview = this;
@ -3160,6 +3177,14 @@ var FlowLayout = /** @class */ (function (_super) {
FlowLayout.prototype.findCompletelyVisibleItems = function (context) {
return this.nativeChannel(context, 'findCompletelyVisibleItems')();
};
/**
* Reload all list items.
* @param context
* @returns
*/
FlowLayout.prototype.reload = function (context) {
return this.nativeChannel(context, 'reload')();
};
FlowLayout.prototype.reset = function () {
this.cachedViews.clear();
this.itemCount = 0;

View File

@ -1889,13 +1889,18 @@ class List extends Superview {
findCompletelyVisibleItems(context) {
return this.nativeChannel(context, 'findCompletelyVisibleItems')();
}
/**
* Reload all list items.
* @param context
* @returns
*/
reload(context) {
return this.nativeChannel(context, 'reload')();
}
reset() {
this.cachedViews.clear();
this.itemCount = 0;
}
reload(context) {
return this.nativeChannel(context, 'reload')();
}
getItem(itemIdx) {
let view = this.renderItem(itemIdx);
view.superview = this;
@ -2022,6 +2027,18 @@ class Slider extends Superview {
allSubviews() {
return this.cachedViews.values();
}
/**
* Reload all list items.
* @param context
* @returns
*/
reload(context) {
return this.nativeChannel(context, 'reload')();
}
reset() {
this.cachedViews.clear();
this.itemCount = 0;
}
getItem(itemIdx) {
let view = this.renderPage(itemIdx);
view.superview = this;
@ -2397,6 +2414,14 @@ class FlowLayout extends Superview {
findCompletelyVisibleItems(context) {
return this.nativeChannel(context, 'findCompletelyVisibleItems')();
}
/**
* Reload all list items.
* @param context
* @returns
*/
reload(context) {
return this.nativeChannel(context, 'reload')();
}
reset() {
this.cachedViews.clear();
this.itemCount = 0;

View File

@ -3419,13 +3419,18 @@ class List extends Superview {
findCompletelyVisibleItems(context) {
return this.nativeChannel(context, 'findCompletelyVisibleItems')();
}
/**
* Reload all list items.
* @param context
* @returns
*/
reload(context) {
return this.nativeChannel(context, 'reload')();
}
reset() {
this.cachedViews.clear();
this.itemCount = 0;
}
reload(context) {
return this.nativeChannel(context, 'reload')();
}
getItem(itemIdx) {
let view = this.renderItem(itemIdx);
view.superview = this;
@ -3552,6 +3557,18 @@ class Slider extends Superview {
allSubviews() {
return this.cachedViews.values();
}
/**
* Reload all list items.
* @param context
* @returns
*/
reload(context) {
return this.nativeChannel(context, 'reload')();
}
reset() {
this.cachedViews.clear();
this.itemCount = 0;
}
getItem(itemIdx) {
let view = this.renderPage(itemIdx);
view.superview = this;
@ -3927,6 +3944,14 @@ class FlowLayout extends Superview {
findCompletelyVisibleItems(context) {
return this.nativeChannel(context, 'findCompletelyVisibleItems')();
}
/**
* Reload all list items.
* @param context
* @returns
*/
reload(context) {
return this.nativeChannel(context, 'reload')();
}
reset() {
this.cachedViews.clear();
this.itemCount = 0;

20
doric-js/index.d.ts vendored
View File

@ -1039,8 +1039,13 @@ declare module "doric" {
* @returns Returns array of completely visible view's index.
*/
findCompletelyVisibleItems(context: BridgeContext): Promise<number[]>;
reset(): void;
/**
* Reload all list items.
* @param context
* @returns
*/
reload(context: BridgeContext): Promise<void>;
reset(): void;
private getItem;
private renderBunchedItems;
toModel(): NativeViewModel;
@ -1075,6 +1080,13 @@ declare module "doric" {
minScale: number;
maxScale: number;
};
/**
* Reload all list items.
* @param context
* @returns
*/
reload(context: BridgeContext): Promise<void>;
reset(): void;
private getItem;
private renderBunchedItems;
slidePage(context: BridgeContext, page: number, smooth?: boolean): Promise<any>;
@ -1182,6 +1194,12 @@ declare module "doric" {
* @returns Returns array of completely visible view's index.
*/
findCompletelyVisibleItems(context: BridgeContext): Promise<number[]>;
/**
* Reload all list items.
* @param context
* @returns
*/
reload(context: BridgeContext): Promise<void>;
reset(): void;
private getItem;
private renderBunchedItems;

View File

@ -47,6 +47,12 @@ export declare class FlowLayout extends Superview {
* @returns Returns array of completely visible view's index.
*/
findCompletelyVisibleItems(context: BridgeContext): Promise<number[]>;
/**
* Reload all list items.
* @param context
* @returns
*/
reload(context: BridgeContext): Promise<void>;
reset(): void;
private getItem;
private renderBunchedItems;

View File

@ -64,6 +64,14 @@ export class FlowLayout extends Superview {
findCompletelyVisibleItems(context) {
return this.nativeChannel(context, 'findCompletelyVisibleItems')();
}
/**
* Reload all list items.
* @param context
* @returns
*/
reload(context) {
return this.nativeChannel(context, 'reload')();
}
reset() {
this.cachedViews.clear();
this.itemCount = 0;

View File

@ -53,8 +53,13 @@ export declare class List extends Superview {
* @returns Returns array of completely visible view's index.
*/
findCompletelyVisibleItems(context: BridgeContext): Promise<number[]>;
reset(): void;
/**
* Reload all list items.
* @param context
* @returns
*/
reload(context: BridgeContext): Promise<void>;
reset(): void;
private getItem;
private renderBunchedItems;
toModel(): NativeViewModel;

View File

@ -67,13 +67,18 @@ export class List extends Superview {
findCompletelyVisibleItems(context) {
return this.nativeChannel(context, 'findCompletelyVisibleItems')();
}
/**
* Reload all list items.
* @param context
* @returns
*/
reload(context) {
return this.nativeChannel(context, 'reload')();
}
reset() {
this.cachedViews.clear();
this.itemCount = 0;
}
reload(context) {
return this.nativeChannel(context, 'reload')();
}
getItem(itemIdx) {
let view = this.renderItem(itemIdx);
view.superview = this;

View File

@ -29,6 +29,13 @@ export declare class Slider extends Superview {
minScale: number;
maxScale: number;
};
/**
* Reload all list items.
* @param context
* @returns
*/
reload(context: BridgeContext): Promise<void>;
reset(): void;
private getItem;
private renderBunchedItems;
slidePage(context: BridgeContext, page: number, smooth?: boolean): Promise<any>;

View File

@ -41,6 +41,18 @@ export class Slider extends Superview {
allSubviews() {
return this.cachedViews.values();
}
/**
* Reload all list items.
* @param context
* @returns
*/
reload(context) {
return this.nativeChannel(context, 'reload')();
}
reset() {
this.cachedViews.clear();
this.itemCount = 0;
}
getItem(itemIdx) {
let view = this.renderPage(itemIdx);
view.superview = this;

View File

@ -100,6 +100,14 @@ export class FlowLayout extends Superview {
return this.nativeChannel(context, 'findCompletelyVisibleItems')() as Promise<number[]>
}
/**
* Reload all list items.
* @param context
* @returns
*/
reload(context: BridgeContext) {
return this.nativeChannel(context, 'reload')() as Promise<void>
}
reset() {
this.cachedViews.clear()

View File

@ -112,15 +112,20 @@ export class List extends Superview {
return this.nativeChannel(context, 'findCompletelyVisibleItems')() as Promise<number[]>
}
/**
* Reload all list items.
* @param context
* @returns
*/
reload(context: BridgeContext) {
return this.nativeChannel(context, 'reload')() as Promise<void>
}
reset() {
this.cachedViews.clear()
this.itemCount = 0
}
reload(context: BridgeContext) {
return this.nativeChannel(context, 'reload')() as Promise<void>
}
private getItem(itemIdx: number) {
let view = this.renderItem(itemIdx)
view.superview = this

View File

@ -63,6 +63,20 @@ export class Slider extends Superview {
@Property
slideStyle?: "zoomOut" | { type: "zoomOut", minScale: number, maxScale: number }
/**
* Reload all list items.
* @param context
* @returns
*/
reload(context: BridgeContext) {
return this.nativeChannel(context, 'reload')() as Promise<void>
}
reset() {
this.cachedViews.clear()
this.itemCount = 0
}
private getItem(itemIdx: number) {
let view = this.renderPage(itemIdx)
view.superview = this

View File

@ -3496,13 +3496,18 @@ class List extends Superview {
findCompletelyVisibleItems(context) {
return this.nativeChannel(context, 'findCompletelyVisibleItems')();
}
/**
* Reload all list items.
* @param context
* @returns
*/
reload(context) {
return this.nativeChannel(context, 'reload')();
}
reset() {
this.cachedViews.clear();
this.itemCount = 0;
}
reload(context) {
return this.nativeChannel(context, 'reload')();
}
getItem(itemIdx) {
let view = this.renderItem(itemIdx);
view.superview = this;
@ -3629,6 +3634,18 @@ class Slider extends Superview {
allSubviews() {
return this.cachedViews.values();
}
/**
* Reload all list items.
* @param context
* @returns
*/
reload(context) {
return this.nativeChannel(context, 'reload')();
}
reset() {
this.cachedViews.clear();
this.itemCount = 0;
}
getItem(itemIdx) {
let view = this.renderPage(itemIdx);
view.superview = this;
@ -4004,6 +4021,14 @@ class FlowLayout extends Superview {
findCompletelyVisibleItems(context) {
return this.nativeChannel(context, 'findCompletelyVisibleItems')();
}
/**
* Reload all list items.
* @param context
* @returns
*/
reload(context) {
return this.nativeChannel(context, 'reload')();
}
reset() {
this.cachedViews.clear();
this.itemCount = 0;

File diff suppressed because one or more lines are too long