add reset logic when item count or render page changed

This commit is contained in:
王劲鹏
2021-07-08 20:02:37 +08:00
committed by osborn
parent 98c3bc6668
commit 560990a39e
2 changed files with 68 additions and 45 deletions

View File

@@ -45,6 +45,8 @@ public class SliderNode extends SuperNode<RecyclerView> {
private String onPageSlidedFuncId;
private int lastPosition = 0;
private int itemCount = 0;
private boolean loop = false;
private String renderPageFuncId;
private boolean scrollable = true;
public SliderNode(DoricContext doricContext) {
@@ -147,12 +149,35 @@ public class SliderNode extends SuperNode<RecyclerView> {
@Override
public void blend(JSObject jsObject) {
super.blend(jsObject);
final boolean needToScroll = (loop && !slideAdapter.loop)
|| (!renderPageFuncId.equals(slideAdapter.renderPageFuncId))
|| (slideAdapter.itemCount == 0 && itemCount > 0);
// If reset renderItem,should reset native cache.
if (!renderPageFuncId.equals(slideAdapter.renderPageFuncId)) {
slideAdapter.itemValues.clear();
clearSubModel();
slideAdapter.renderPageFuncId = renderPageFuncId;
}
slideAdapter.loop = loop;
if (mView != null) {
mView.post(new Runnable() {
@Override
public void run() {
slideAdapter.itemCount = itemCount;
slideAdapter.notifyDataSetChanged();
if (needToScroll) {
mView.post(new Runnable() {
@Override
public void run() {
mView.scrollToPosition(1);
}
});
}
}
});
}
@@ -171,13 +196,7 @@ public class SliderNode extends SuperNode<RecyclerView> {
this.itemCount = prop.asNumber().toInt();
break;
case "renderPage":
// If reset renderItem,should reset native cache.
String funcId = prop.asString().value();
if (!funcId.equals(this.slideAdapter.renderPageFuncId)) {
this.slideAdapter.itemValues.clear();
clearSubModel();
this.slideAdapter.renderPageFuncId = funcId;
}
this.renderPageFuncId = prop.asString().value();
break;
case "batchCount":
this.slideAdapter.batchCount = prop.asNumber().toInt();
@@ -186,16 +205,7 @@ public class SliderNode extends SuperNode<RecyclerView> {
this.onPageSlidedFuncId = prop.asString().toString();
break;
case "loop":
boolean loop = prop.asBoolean().value();
slideAdapter.loop = loop;
if (loop) {
mView.post(new Runnable() {
@Override
public void run() {
mView.scrollToPosition(1);
}
});
}
this.loop = prop.asBoolean().value();
break;
default:
super.blend(view, name, prop);