You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by ha...@apache.org on 2017/10/10 13:58:09 UTC

[03/15] incubator-weex git commit: fix scroll to bug and add md5 for template

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/948aa127
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/948aa127
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/948aa127

Branch: refs/heads/website
Commit: 948aa127dd24b2570d40d1de875b1b38228af33b
Parents: e904b62
Author: jianbai.gbj <ji...@alibaba-inc.com>
Authored: Mon Oct 9 19:19:33 2017 +0800
Committer: gurisxie <27...@qq.com>
Committed: Tue Oct 10 12:11:25 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/948aa127/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/948aa127/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/948aa127/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));