fix scroll to bug and add md5 for template
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/b9015dd6 Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/b9015dd6 Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/b9015dd6 Branch: refs/heads/website Commit: b9015dd6e61bcc8f2960330f62d86303577ec6d0 Parents: 04009ef Author: jianbai.gbj <jianbai....@alibaba-inc.com> Authored: Mon Oct 9 19:19:33 2017 +0800 Committer: Hanks <zhanghan...@gmail.com> Committed: Tue Oct 10 21:42:52 2017 +0800 ---------------------------------------------------------------------- .../weex/ui/component/binding/Layouts.java | 69 ++++++++++++++------ .../list/template/TemplateViewHolder.java | 3 + .../list/template/WXRecyclerTemplateList.java | 3 +- 3 files changed, 53 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b9015dd6/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java index bf0abfc..f80bc1e 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/binding/Layouts.java @@ -20,11 +20,15 @@ package com.taobao.weex.ui.component.binding; +import android.os.AsyncTask; +import android.speech.tts.Voice; + import com.taobao.weex.WXSDKInstance; import com.taobao.weex.dom.WXDomObject; import com.taobao.weex.dom.flex.CSSLayoutContext; import com.taobao.weex.ui.component.WXComponent; import com.taobao.weex.ui.component.WXVContainer; +import com.taobao.weex.ui.component.list.template.TemplateViewHolder; /** * Created by furture on 2017/8/21. @@ -33,34 +37,57 @@ public class Layouts { /** * do dom layout, and set layout to component * */ - public static void doLayout(WXComponent component, CSSLayoutContext layoutContext){ + public static void doLayout(final TemplateViewHolder templateViewHolder){ + final CSSLayoutContext layoutContext = templateViewHolder.getLayoutContext(); + final WXComponent component = templateViewHolder.getComponent(); final WXSDKInstance instance = component.getInstance(); - WXDomObject domObject = (WXDomObject) component.getDomObject(); - domObject.traverseTree(new WXDomObject.Consumer() { + final int position = templateViewHolder.getHolderPosition(); + if(templateViewHolder.asyncTask != null){ + templateViewHolder.asyncTask.cancel(true); + } + AsyncTask<Void, Void, Void> asyncTask = new AsyncTask<Void, Void, Void>() { @Override - public void accept(WXDomObject dom) { - if(instance == null || instance.isDestroy()){ - return; - } - if(!dom.hasUpdate()){ - return; + protected Void doInBackground(Void... params) { + if(templateViewHolder.getHolderPosition() == position){ + + WXDomObject domObject = (WXDomObject) component.getDomObject(); + domObject.traverseTree(new WXDomObject.Consumer() { + @Override + public void accept(WXDomObject dom) { + if(instance == null || instance.isDestroy()){ + return; + } + if(!dom.hasUpdate()){ + return; + } + dom.layoutBefore(); + } + }); + domObject.calculateLayout(layoutContext); + domObject.traverseTree( new WXDomObject.Consumer() { + @Override + public void accept(WXDomObject dom) { + if(instance == null || instance.isDestroy()){ + return; + } + if (dom.hasUpdate()) { + dom.layoutAfter(); + } + } + }); } - dom.layoutBefore(); + return null; } - }); - domObject.calculateLayout(layoutContext); - domObject.traverseTree( new WXDomObject.Consumer() { + @Override - public void accept(WXDomObject dom) { - if(instance == null || instance.isDestroy()){ - return; - } - if (dom.hasUpdate()) { - dom.layoutAfter(); + protected void onPostExecute(Void aVoid) { + if(position == templateViewHolder.getHolderPosition()) { + setLayout(component, false); } } - }); - setLayout(component, false); + }; + templateViewHolder.asyncTask = asyncTask; + asyncTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b9015dd6/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateViewHolder.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateViewHolder.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateViewHolder.java index 6a6c2b9..21930eb 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateViewHolder.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/TemplateViewHolder.java @@ -17,6 +17,7 @@ * under the License. */ package com.taobao.weex.ui.component.list.template; +import android.os.AsyncTask; import android.view.View; import com.taobao.weex.annotation.Component; @@ -44,6 +45,8 @@ public class TemplateViewHolder extends ListBaseViewHolder { private int holderPosition = -1; + public AsyncTask<Void, Void, Void> asyncTask; + /** * header position * */ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b9015dd6/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java index 1ca589b..0454aba 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/WXRecyclerTemplateList.java @@ -1017,7 +1017,8 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp if(WXEnvironment.isApkDebugable()){ WXLogUtils.d(TAG, position + getTemplateKey(position) + " onBindViewHolder render used " + (System.currentTimeMillis() - start)); } - Layouts.doLayout(component, templateViewHolder.getLayoutContext()); + + Layouts.doLayout(templateViewHolder); cellLifecycleManager.onAttach(position, component); if(WXEnvironment.isApkDebugable()){ WXLogUtils.d(TAG, position + getTemplateKey(position) + " onBindViewHolder layout used " + (System.currentTimeMillis() - start));