You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by ac...@apache.org on 2017/09/21 13:38:57 UTC
[30/50] [abbrv] incubator-weex git commit: 生命周期的事件完善
生命周期的事件完善
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/c8bed7ea
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/c8bed7ea
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/c8bed7ea
Branch: refs/heads/0.16-dev
Commit: c8bed7eae213b589c488a9bd0edabdccc76847aa
Parents: 699da8f
Author: jianbai.gbj <ji...@alibaba-inc.com>
Authored: Wed Sep 20 21:41:17 2017 +0800
Committer: jianbai.gbj <ji...@alibaba-inc.com>
Committed: Wed Sep 20 21:41:17 2017 +0800
----------------------------------------------------------------------
.../list/template/CellLifecycleManager.java | 62 +++++++++++---------
.../list/template/WXRecyclerTemplateList.java | 25 ++++----
2 files changed, 45 insertions(+), 42 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c8bed7ea/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/CellLifecycleManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/CellLifecycleManager.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/CellLifecycleManager.java
index 80880c2..054bb7a 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/CellLifecycleManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/template/CellLifecycleManager.java
@@ -18,8 +18,6 @@
*/
package com.taobao.weex.ui.component.list.template;
-import android.util.Log;
-
import com.taobao.weex.common.Constants;
import com.taobao.weex.dom.WXEvent;
import com.taobao.weex.ui.component.WXComponent;
@@ -46,18 +44,18 @@ public class CellLifecycleManager {
private WXRecyclerTemplateList recyclerTemplateList;
private Map<String,Map<String,List<String>>> eventSlotWatchRefs;
- private List<String> createEvent; // only call once
+ private Map<Integer,String> firedCreateEvent; // only call once
public CellLifecycleManager(WXRecyclerTemplateList recyclerTemplateList) {
this.recyclerTemplateList = recyclerTemplateList;
this.eventSlotWatchRefs = new HashMap<>();
- this.createEvent = new ArrayList<>();
+ this.firedCreateEvent = new HashMap<>();
}
- public void updateSlotLifecycleWatch(WXCell cell, WXComponent component){
+ public void filterLifecycleWatchEvent(WXCell cell, WXComponent component){
WXEvent wxEvent = component.getDomObject().getEvents();
for(String event : lifecycleEventNames){
if(wxEvent.contains(event)){
@@ -80,7 +78,7 @@ public class CellLifecycleManager {
WXVContainer container = (WXVContainer) component;
for(int i=0; i<container.getChildCount(); i++){
WXComponent child = container.getChild(i);
- updateSlotLifecycleWatch(cell, child);
+ filterLifecycleWatchEvent(cell, child);
}
}
}
@@ -89,26 +87,25 @@ public class CellLifecycleManager {
* onCreate event
* */
public void onCreate(int position){
- String key = recyclerTemplateList.getTemplateKey(position);
+ WXCell cell = recyclerTemplateList.getSourceTemplate(position);
+ if(cell == null){
+ return;
+ }
Map<String,List<String>> slotWatchCreateRefs = eventSlotWatchRefs.get(Constants.Event.SLOT_LIFECYCLE.CREATE);
if(slotWatchCreateRefs == null
- || slotWatchCreateRefs.get(key) == null
- || slotWatchCreateRefs.get(key).size() == 0){
+ || slotWatchCreateRefs.get(cell.getRef()) == null
+ || slotWatchCreateRefs.get(cell.getRef()).size() == 0){
return;
}
- if(createEvent.size() >= position){
- if(createEvent.contains(key + position)){
- return;
- }
+ if(cell.getRef().equals(firedCreateEvent.get(position))){
+ return;
}
- WXCell cell = recyclerTemplateList.getTemplates().get(key);
- if(cell == null){
+ List<String> refs = slotWatchCreateRefs.get(cell.getRef());
+ if(refs == null || refs.size() == 0){
return;
}
- Map<String, Object> params = new HashMap<>(8);
- params.put("position", position);
- cell.fireEvent(Constants.Event.SLOT_LIFECYCLE.CREATE, params);
- createEvent.add(key + position);
+ fireChildEvent(Constants.Event.SLOT_LIFECYCLE.CREATE, cell, refs, position);
+ firedCreateEvent.put(position, cell.getRef());
}
@@ -160,28 +157,35 @@ public class CellLifecycleManager {
String key = recyclerTemplateList.getTemplateKey(position);
if(slotWatchDestroyRefs.get(key) == null
|| slotWatchDestroyRefs.get(key).size() == 0){
- return;
+ continue;
}
WXCell cell = recyclerTemplateList.getTemplates().get(key);
if(cell == null){
- return;
+ continue;
+ }
+ List<String> refs = slotWatchDestroyRefs.get(cell.getRef());
+ if(refs == null || refs.size() == 0){
+ continue;
}
- Map<String, Object> params = new HashMap<>(8);
- params.put("position", position);
- cell.fireEvent(Constants.Event.SLOT_LIFECYCLE.DESTORY, params);
+ fireChildEvent(Constants.Event.SLOT_LIFECYCLE.DESTORY, cell, refs, position);
}
eventSlotWatchRefs.clear();
}
private final void fireChildEvent(String event, WXCell cell, List<String> refs, int position){
+ if(refs == null || refs.size() == 0){
+ return;
+ }
for(String ref : refs){
- WXComponent component = recyclerTemplateList.findChildByRef(cell, ref);
- if(component == null){
+ List<WXComponent> components = recyclerTemplateList.findChildListByRef(cell, ref);
+ if(components == null || components.size() == 0){
continue;
}
- Map<String, Object> params = new HashMap<>(8);
- params.put("position", position);
- component.fireEvent(event, params);
+ for(WXComponent component : components) {
+ Map<String, Object> params = new HashMap<>(8);
+ params.put("position", position);
+ component.fireEvent(event, params);
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/c8bed7ea/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 d219f61..734e31d 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
@@ -283,7 +283,7 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
}
}
}
- notifyWatchCreateEvent();
+ fireOnCellOnCreateEvent();
if(getHostView() != null && getHostView().getRecyclerViewBaseAdapter() != null){
getHostView().getRecyclerViewBaseAdapter().notifyDataSetChanged();
}
@@ -292,18 +292,8 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
return bounceRecyclerView;
}
- /**
- * notify watch event
- * */
- private void notifyWatchCreateEvent() {
- if(listData != null){
- return;
- }
-
- }
-
@Override
protected void onHostViewInitialized(BounceRecyclerView host) {
@@ -547,7 +537,7 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
}
}
}
- cellLifecycleManager.updateSlotLifecycleWatch((WXCell)child, child);
+ cellLifecycleManager.filterLifecycleWatchEvent((WXCell)child, child);
notifyUpdateList();
}
}
@@ -688,6 +678,15 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
if(update){
notifyUpdateList();
}
+ fireOnCellOnCreateEvent();
+ }
+
+ private void fireOnCellOnCreateEvent(){
+ if(listData != null){
+ for(int i=0; i<listData.size(); i++){
+ cellLifecycleManager.onCreate(i);
+ }
+ }
}
@WXComponentProp(name = Constants.Name.OFFSET_ACCURACY)
@@ -1097,7 +1096,7 @@ public class WXRecyclerTemplateList extends WXVContainer<BounceRecyclerView> imp
/**
* get source template
* */
- private WXCell getSourceTemplate(int position){
+ public WXCell getSourceTemplate(int position){
String template = getTemplateKey(position);
return mTemplates.get(template);
}