@quicktvui/ai 1.0.7 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/package.json +1 -1
  2. package/rules/.clinerules +27 -4
  3. package/rules/.cursorrules +27 -4
  4. package/rules/.github/copilot-instructions.md +27 -4
  5. package/rules/.source/hippy/extend_views/CoverFlowHorizontalView.java +203 -0
  6. package/rules/.source/hippy/extend_views/CoverFlowVerticalView.java +203 -0
  7. package/rules/.source/hippy/extend_views/CoverFlowViewController.java +195 -0
  8. package/rules/.source/hippy/extend_views/EngineRootView.java +125 -0
  9. package/rules/.source/hippy/extend_views/ExtendTag.java +83 -0
  10. package/rules/.source/hippy/extend_views/FocusSearchHelper.java +124 -0
  11. package/rules/.source/hippy/extend_views/IRecyclerItemView.java +12 -0
  12. package/rules/.source/hippy/extend_views/JSEventHandleView.java +5 -0
  13. package/rules/.source/hippy/extend_views/MarqueeRelayManager.java +133 -0
  14. package/rules/.source/hippy/extend_views/MarqueeRelayTextView.java +211 -0
  15. package/rules/.source/hippy/extend_views/ProgressBarView.java +83 -0
  16. package/rules/.source/hippy/extend_views/ProgressBarViewController.java +145 -0
  17. package/rules/.source/hippy/extend_views/SeekBarView.java +104 -0
  18. package/rules/.source/hippy/extend_views/SeekBarViewController.java +218 -0
  19. package/rules/.source/hippy/extend_views/StateImageView.java +149 -0
  20. package/rules/.source/hippy/extend_views/StateImageViewController.java +34 -0
  21. package/rules/.source/hippy/extend_views/TVButtonView.java +314 -0
  22. package/rules/.source/hippy/extend_views/TVButtonViewController.java +89 -0
  23. package/rules/.source/hippy/extend_views/TVTextView.java +684 -0
  24. package/rules/.source/hippy/extend_views/TVViewActor.java +811 -0
  25. package/rules/.source/hippy/extend_views/TVViewActorHost.java +6 -0
  26. package/rules/.source/hippy/extend_views/TVViewActor/346/216/245/345/205/245.md +66 -0
  27. package/rules/.source/hippy/extend_views/TemplateUtil.java +336 -0
  28. package/rules/.source/hippy/extend_views/TextButtonNode.java +47 -0
  29. package/rules/.source/hippy/extend_views/TextViewController.java +377 -0
  30. package/rules/.source/hippy/extend_views/fastlist/CenterFlyInAnimator.java +96 -0
  31. package/rules/.source/hippy/extend_views/fastlist/ChildOnScreenScroller.java +548 -0
  32. package/rules/.source/hippy/extend_views/fastlist/ClonedViewTag.java +17 -0
  33. package/rules/.source/hippy/extend_views/fastlist/EventDeliverer.java +55 -0
  34. package/rules/.source/hippy/extend_views/fastlist/FastAdapter.java +4683 -0
  35. package/rules/.source/hippy/extend_views/fastlist/FastAdapterUtil.java +982 -0
  36. package/rules/.source/hippy/extend_views/fastlist/FastFlexNode.java +48 -0
  37. package/rules/.source/hippy/extend_views/fastlist/FastFlexView.java +873 -0
  38. package/rules/.source/hippy/extend_views/fastlist/FastFlexViewController.java +130 -0
  39. package/rules/.source/hippy/extend_views/fastlist/FastItemNode.java +67 -0
  40. package/rules/.source/hippy/extend_views/fastlist/FastItemView.java +306 -0
  41. package/rules/.source/hippy/extend_views/fastlist/FastItemViewController.java +106 -0
  42. package/rules/.source/hippy/extend_views/fastlist/FastListModule.java +95 -0
  43. package/rules/.source/hippy/extend_views/fastlist/FastListNode.java +90 -0
  44. package/rules/.source/hippy/extend_views/fastlist/FastListView.java +2466 -0
  45. package/rules/.source/hippy/extend_views/fastlist/FastListViewController.java +1038 -0
  46. package/rules/.source/hippy/extend_views/fastlist/FastListView/346/270/262/346/237/223/346/265/201/347/250/213/345/233/276.graffle +0 -0
  47. package/rules/.source/hippy/extend_views/fastlist/FastPendingView.java +47 -0
  48. package/rules/.source/hippy/extend_views/fastlist/ItemDecorations.java +71 -0
  49. package/rules/.source/hippy/extend_views/fastlist/ItemStoreNode.java +64 -0
  50. package/rules/.source/hippy/extend_views/fastlist/ItemStoreView.java +13 -0
  51. package/rules/.source/hippy/extend_views/fastlist/ItemStoreViewController.java +45 -0
  52. package/rules/.source/hippy/extend_views/fastlist/ListItemHolder.java +7 -0
  53. package/rules/.source/hippy/extend_views/fastlist/ListViewControlProp.java +41 -0
  54. package/rules/.source/hippy/extend_views/fastlist/MouseRecycleView.java +509 -0
  55. package/rules/.source/hippy/extend_views/fastlist/OnFastItemClickListener.java +12 -0
  56. package/rules/.source/hippy/extend_views/fastlist/OnFastItemFocusChangeListener.java +9 -0
  57. package/rules/.source/hippy/extend_views/fastlist/OnFastScrollStateChangedListener.java +7 -0
  58. package/rules/.source/hippy/extend_views/fastlist/PendingListNode.java +18 -0
  59. package/rules/.source/hippy/extend_views/fastlist/PendingViewController.java +13 -0
  60. package/rules/.source/hippy/extend_views/fastlist/PostHandlerView.java +6 -0
  61. package/rules/.source/hippy/extend_views/fastlist/PostTaskHolder.java +20 -0
  62. package/rules/.source/hippy/extend_views/fastlist/ReplaceChildController.java +105 -0
  63. package/rules/.source/hippy/extend_views/fastlist/ReplaceChildView.java +312 -0
  64. package/rules/.source/hippy/extend_views/fastlist/TVListView.java +3692 -0
  65. package/rules/.source/hippy/extend_views/fastlist/TemplateCodeParser.java +247 -0
  66. package/rules/.source/hippy/extend_views/fastlist/Utils.java +572 -0
  67. package/rules/.source/hippy/extend_views/fastlist/ViewTag.java +317 -0
  68. package/rules/.source/hippy/extend_views/fastlist/VirtualListView.java +8 -0
  69. package/rules/.source/hippy/extend_views/fastlist/diff/FastListDataBindingHelper.java +320 -0
  70. package/rules/.source/hippy/extend_views/fastlist/diff/KeyDiffHelper.java +289 -0
  71. package/rules/.source/hippy/extend_views/fastlist/diff/NoKeyDiffHelper.java +278 -0
  72. package/rules/.source/hippy/extend_views/tag/FontTag.java +53 -0
  73. package/rules/.source/hippy/extend_views/tag/HtmlTag.java +191 -0
  74. package/rules/.source/hippy/extend_views/tag/HtmlTagHandler.java +185 -0
  75. package/rules/.source/hippy/extend_views/tag/SpanTag.java +160 -0
  76. package/rules/.source/hippy/extend_views/tag/TextFontSpan.java +102 -0
  77. package/rules/.source/hippy/extend_views/waterfall/Chunk.java +10 -0
  78. package/rules/.source/hippy/extend_views/waterfall/ChunkGroup.java +5 -0
  79. package/rules/.source/hippy/extend_views/waterfall/Section.java +4 -0
  80. package/rules/.source/hippy/extend_views/waterfall/Tabs.java +5 -0
  81. package/rules/.source/hippy/extend_views/waterfall/WaterfallUtils.java +26 -0
  82. package/rules/.source/hippy/hippy_uimanager/ControllerHolder.java +30 -0
  83. package/rules/.source/hippy/hippy_uimanager/ControllerManager.java +651 -0
  84. package/rules/.source/hippy/hippy_uimanager/ControllerRegistry.java +102 -0
  85. package/rules/.source/hippy/hippy_uimanager/ControllerUpdateManger.java +252 -0
  86. package/rules/.source/hippy/hippy_uimanager/CustomControllerHelper.java +425 -0
  87. package/rules/.source/hippy/hippy_uimanager/DiffUtils.java +526 -0
  88. package/rules/.source/hippy/hippy_uimanager/ExtendViewGroup.java +36 -0
  89. package/rules/.source/hippy/hippy_uimanager/HippyCustomViewCreator.java +29 -0
  90. package/rules/.source/hippy/hippy_uimanager/HippyGroupController.java +83 -0
  91. package/rules/.source/hippy/hippy_uimanager/HippyViewBase.java +27 -0
  92. package/rules/.source/hippy/hippy_uimanager/HippyViewController.java +2189 -0
  93. package/rules/.source/hippy/hippy_uimanager/HippyViewEvent.java +52 -0
  94. package/rules/.source/hippy/hippy_uimanager/IHippyZIndexViewGroup.java +24 -0
  95. package/rules/.source/hippy/hippy_uimanager/InternalExtendViewUtil.java +395 -0
  96. package/rules/.source/hippy/hippy_uimanager/ListItemRenderNode.java +143 -0
  97. package/rules/.source/hippy/hippy_uimanager/ListViewRenderNode.java +44 -0
  98. package/rules/.source/hippy/hippy_uimanager/MatrixUtil.java +470 -0
  99. package/rules/.source/hippy/hippy_uimanager/NativeGestureDispatcher.java +349 -0
  100. package/rules/.source/hippy/hippy_uimanager/NativeGestureProcessor.java +188 -0
  101. package/rules/.source/hippy/hippy_uimanager/PullFooterRenderNode.java +43 -0
  102. package/rules/.source/hippy/hippy_uimanager/PullHeaderRenderNode.java +43 -0
  103. package/rules/.source/hippy/hippy_uimanager/RenderManager.java +304 -0
  104. package/rules/.source/hippy/hippy_uimanager/RenderNode.java +533 -0
  105. package/rules/.source/hippy/hippy_uimanager/StateView.java +17 -0
  106. package/rules/.source/hippy/hippy_uimanager/TransformUtil.java +125 -0
  107. package/rules/.source/hippy/hippy_uimanager/ViewGroupDrawingOrderHelper.java +108 -0
  108. package/rules/.source/hippy/hippy_uimanager/ViewStateProvider.java +10 -0
  109. package/rules/.source/hippy/hippy_views/audioview/AudioPlayManager.java +457 -0
  110. package/rules/.source/hippy/hippy_views/audioview/AudioView.java +225 -0
  111. package/rules/.source/hippy/hippy_views/audioview/AudioViewController.java +135 -0
  112. package/rules/.source/hippy/hippy_views/common/CommonBackgroundDrawable.java +58 -0
  113. package/rules/.source/hippy/hippy_views/common/CommonBorder.java +37 -0
  114. package/rules/.source/hippy/hippy_views/custom/HippyCustomPropsController.java +61 -0
  115. package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerListAdapter.java +399 -0
  116. package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerView.java +378 -0
  117. package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerViewController.java +187 -0
  118. package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerViewHolder.java +39 -0
  119. package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerViewWrapper.java +134 -0
  120. package/rules/.source/hippy/hippy_views/hippylist/NodePositionHelper.java +55 -0
  121. package/rules/.source/hippy/hippy_views/hippylist/PreloadHelper.java +54 -0
  122. package/rules/.source/hippy/hippy_views/hippylist/PullFooterEventHelper.java +61 -0
  123. package/rules/.source/hippy/hippy_views/hippylist/PullHeaderEventHelper.java +127 -0
  124. package/rules/.source/hippy/hippy_views/hippylist/RecyclerViewEventHelper.java +394 -0
  125. package/rules/.source/hippy/hippy_views/image/HippyContentDrawable.java +113 -0
  126. package/rules/.source/hippy/hippy_views/image/HippyImageView.java +1608 -0
  127. package/rules/.source/hippy/hippy_views/image/HippyImageViewController.java +382 -0
  128. package/rules/.source/hippy/hippy_views/image/IImageStateListener.java +7 -0
  129. package/rules/.source/hippy/hippy_views/list/ChildOnScreenScroller.java +255 -0
  130. package/rules/.source/hippy/hippy_views/list/HippyListAdapter.java +647 -0
  131. package/rules/.source/hippy/hippy_views/list/HippyListItemView.java +162 -0
  132. package/rules/.source/hippy/hippy_views/list/HippyListItemViewController.java +45 -0
  133. package/rules/.source/hippy/hippy_views/list/HippyListView.java +915 -0
  134. package/rules/.source/hippy/hippy_views/list/HippyListViewController.java +622 -0
  135. package/rules/.source/hippy/hippy_views/list/HippyRecycler.java +31 -0
  136. package/rules/.source/hippy/hippy_views/list/IRecycleItemTypeChange.java +23 -0
  137. package/rules/.source/hippy/hippy_views/list/ItemDecorations.java +70 -0
  138. package/rules/.source/hippy/hippy_views/list/NegativeLongKeyFlinger.java +156 -0
  139. package/rules/.source/hippy/hippy_views/list/NodeHolder.java +34 -0
  140. package/rules/.source/hippy/hippy_views/list/RecycleViewFlinger.java +126 -0
  141. package/rules/.source/hippy/hippy_views/list/TVRecyclerView.java +2070 -0
  142. package/rules/.source/hippy/hippy_views/list/TVSingleLineListView.java +15 -0
  143. package/rules/.source/hippy/hippy_views/modal/HippyModalHostManager.java +102 -0
  144. package/rules/.source/hippy/hippy_views/modal/HippyModalHostView.java +597 -0
  145. package/rules/.source/hippy/hippy_views/modal/ModalHostHelper.java +46 -0
  146. package/rules/.source/hippy/hippy_views/modal/ModalStyleNode.java +34 -0
  147. package/rules/.source/hippy/hippy_views/modal/RequestCloseEvent.java +32 -0
  148. package/rules/.source/hippy/hippy_views/modal/ShowEvent.java +31 -0
  149. package/rules/.source/hippy/hippy_views/navigator/Navigator.java +126 -0
  150. package/rules/.source/hippy/hippy_views/navigator/NavigatorController.java +120 -0
  151. package/rules/.source/hippy/hippy_views/refresh/HippyPullFooterView.java +47 -0
  152. package/rules/.source/hippy/hippy_views/refresh/HippyPullFooterViewController.java +65 -0
  153. package/rules/.source/hippy/hippy_views/refresh/HippyPullHeaderView.java +39 -0
  154. package/rules/.source/hippy/hippy_views/refresh/HippyPullHeaderViewController.java +104 -0
  155. package/rules/.source/hippy/hippy_views/refresh/RefreshWrapper.java +237 -0
  156. package/rules/.source/hippy/hippy_views/refresh/RefreshWrapperController.java +62 -0
  157. package/rules/.source/hippy/hippy_views/refresh/RefreshWrapperItemController.java +39 -0
  158. package/rules/.source/hippy/hippy_views/refresh/RefreshWrapperItemView.java +26 -0
  159. package/rules/.source/hippy/hippy_views/scroll/HippyHorizontalScrollView.java +500 -0
  160. package/rules/.source/hippy/hippy_views/scroll/HippyOnScrollHelper.java +39 -0
  161. package/rules/.source/hippy/hippy_views/scroll/HippyScrollView.java +46 -0
  162. package/rules/.source/hippy/hippy_views/scroll/HippyScrollViewController.java +178 -0
  163. package/rules/.source/hippy/hippy_views/scroll/HippyScrollViewEventHelper.java +92 -0
  164. package/rules/.source/hippy/hippy_views/scroll/HippyVerticalScrollView.java +522 -0
  165. package/rules/.source/hippy/hippy_views/text/HippyTextView.java +512 -0
  166. package/rules/.source/hippy/hippy_views/text/HippyTextViewController.java +77 -0
  167. package/rules/.source/hippy/hippy_views/textinput/HippyTextInput.java +668 -0
  168. package/rules/.source/hippy/hippy_views/textinput/HippyTextInputController.java +528 -0
  169. package/rules/.source/hippy/hippy_views/textinput/TextInputNode.java +115 -0
  170. package/rules/.source/hippy/hippy_views/videoview/APEZProvider.java +287 -0
  171. package/rules/.source/hippy/hippy_views/videoview/APKExpansionSupport.java +82 -0
  172. package/rules/.source/hippy/hippy_views/videoview/PivotPoint.java +13 -0
  173. package/rules/.source/hippy/hippy_views/videoview/ScalableType.java +34 -0
  174. package/rules/.source/hippy/hippy_views/videoview/ScalableVideoView.java +265 -0
  175. package/rules/.source/hippy/hippy_views/videoview/ScaleManager.java +191 -0
  176. package/rules/.source/hippy/hippy_views/videoview/Size.java +19 -0
  177. package/rules/.source/hippy/hippy_views/videoview/VideoHippyView.java +917 -0
  178. package/rules/.source/hippy/hippy_views/videoview/VideoHippyViewController.java +236 -0
  179. package/rules/.source/hippy/hippy_views/videoview/ZipResourceFile.java +427 -0
  180. package/rules/.source/hippy/hippy_views/view/CardRootView.java +28 -0
  181. package/rules/.source/hippy/hippy_views/view/CustomLayoutView.java +10 -0
  182. package/rules/.source/hippy/hippy_views/view/CustomNodeView.java +5 -0
  183. package/rules/.source/hippy/hippy_views/view/DialogViewGroup.java +113 -0
  184. package/rules/.source/hippy/hippy_views/view/HippyViewGroup.java +2042 -0
  185. package/rules/.source/hippy/hippy_views/view/HippyViewGroupController.java +583 -0
  186. package/rules/.source/hippy/hippy_views/view/WindowRoot.java +5 -0
  187. package/rules/.source/hippy/hippy_views/viewpager/HippyViewPager.java +308 -0
  188. package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerAdapter.java +148 -0
  189. package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerController.java +246 -0
  190. package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerItem.java +27 -0
  191. package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerItemController.java +42 -0
  192. package/rules/.source/hippy/hippy_views/viewpager/ViewPagerPageChangeListener.java +114 -0
  193. package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageItemExposureEvent.java +40 -0
  194. package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageScrollEvent.java +43 -0
  195. package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageScrollStateChangedEvent.java +42 -0
  196. package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageSelectedEvent.java +42 -0
  197. package/rules/.source/hippy/hippy_views/webview/HippyWebView.java +160 -0
  198. package/rules/.source/hippy/hippy_views/webview/HippyWebViewBridge.java +20 -0
  199. package/rules/.source/hippy/hippy_views/webview/HippyWebViewController.java +103 -0
  200. package/rules/.source/hippy/hippy_views/webview/HippyWebViewInner.java +77 -0
  201. package/rules/.windsurfrules +27 -4
  202. package/rules/AGENTS.md +27 -4
  203. package/rules/CLAUDE.md +27 -3
  204. package/rules/GEMINI.md +25 -3
@@ -0,0 +1,647 @@
1
+ /* Tencent is pleased to support the open source community by making Hippy available.
2
+ * Copyright (C) 2018 THL A29 Limited, a Tencent company. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ package com.tencent.mtt.hippy.views.list;
17
+
18
+ import android.util.Log;
19
+ import android.view.View;
20
+ import android.view.ViewGroup;
21
+ import com.tencent.mtt.hippy.HippyEngineContext;
22
+ import com.tencent.mtt.hippy.common.HippyMap;
23
+ import com.tencent.mtt.hippy.uimanager.DiffUtils;
24
+ import com.tencent.mtt.hippy.uimanager.HippyViewEvent;
25
+ import com.tencent.mtt.hippy.uimanager.ListItemRenderNode;
26
+ import com.tencent.mtt.hippy.uimanager.PullFooterRenderNode;
27
+ import com.tencent.mtt.hippy.uimanager.PullHeaderRenderNode;
28
+ import com.tencent.mtt.hippy.uimanager.RenderNode;
29
+ import com.tencent.mtt.hippy.utils.LogUtils;
30
+ import com.tencent.mtt.hippy.views.refresh.HippyPullFooterView;
31
+ import com.tencent.mtt.hippy.views.refresh.HippyPullHeaderView;
32
+ import com.tencent.mtt.supportui.views.recyclerview.*;
33
+
34
+ import java.util.ArrayList;
35
+
36
+ @SuppressWarnings("deprecation")
37
+ public class HippyListAdapter extends RecyclerAdapter implements IRecycleItemTypeChange {
38
+
39
+ protected final HippyEngineContext mHippyContext;
40
+ private RecyclerViewBase.Recycler mRecycler;
41
+ private HippyViewEvent onEndReachedEvent;
42
+ private HippyViewEvent onLoadMoreEvent;
43
+ // --Commented out by Inspection (2021/5/4 20:54):private static final String TAG = "HippyListAdapter";
44
+ // harryguo: 给hippy sdk提供API:设置提前预加载的条目数量,默认为0
45
+ //XXX zhaopeng 20201214 新修改预加载方式,默认不能为0,否则不会加载更多
46
+ private int mPreloadItemNum = 1;
47
+
48
+ public HippyListAdapter(RecyclerView recyclerView, HippyEngineContext HippyContext) {
49
+ super(recyclerView);
50
+ mHippyContext = HippyContext;
51
+ }
52
+
53
+ @Override
54
+ public String getViewHolderReUseKey(int position) {
55
+ if (position < 0 || position > getItemCount()) {
56
+ return null;
57
+ }
58
+
59
+ return String.valueOf(position);
60
+ }
61
+
62
+ @Override
63
+ public RecyclerView.ViewHolderWrapper onCreateSuspendViewHolderWithPos(RecyclerViewBase parent,
64
+ int position, int viewType) {
65
+ return null;
66
+ }
67
+
68
+ @Override
69
+ public ContentHolder onCreateContentViewWithPos(ViewGroup parent, int position, int viewType) {
70
+ NodeHolder contentHolder = new NodeHolder();
71
+ //LogUtils.d("HippyListView", "onCreateContentViewWithPos start position " + position);
72
+ RenderNode contentViewRenderNode = mHippyContext.getRenderManager()
73
+ .getRenderNode(mParentRecyclerView.getId()).getChildAt(position);
74
+ contentViewRenderNode.setLazy(false);
75
+ View view = contentViewRenderNode.createViewRecursive();
76
+ contentHolder.mContentView = view;
77
+ if (view instanceof HippyPullHeaderView) {
78
+ ((HippyPullHeaderView) view).setParentView(mParentRecyclerView);
79
+ }
80
+ if (view instanceof HippyPullFooterView) {
81
+ ((HippyPullFooterView) view).setParentView(mParentRecyclerView);
82
+ }
83
+ contentHolder.mBindNode = contentViewRenderNode;
84
+ contentHolder.isCreated = true;
85
+ //LogUtils.d("HippyListView", "onCreateContentViewWithPos end position " + position);
86
+ //LogUtils.d("HippyListView", "onCreateContentViewWithPos" + contentViewRenderNode);
87
+ return contentHolder;
88
+ }
89
+
90
+ @Override
91
+ public void onViewRecycled(ContentHolder holder, int position) {
92
+ super.onViewRecycled(holder, position);
93
+ LogUtils.d("HippyListView", "--------onViewRecycled : " + position+" view:"+holder.mContentView);
94
+ if(mParentRecyclerView instanceof TVRecyclerView && ((TVRecyclerView) mParentRecyclerView).isListenBoundEvent()){
95
+ sendUnBindEvent(mParentRecyclerView,position);
96
+ }
97
+ }
98
+
99
+
100
+
101
+ @Override
102
+ protected void onViewAbandon(RecyclerView.ViewHolderWrapper viewHolder) {
103
+ // set is lazy true the holder is delete so delete view
104
+ NodeHolder nodeHolder = (NodeHolder) viewHolder.mContentHolder;
105
+
106
+ if (nodeHolder.mBindNode != null && !nodeHolder.mBindNode.isDelete()) {
107
+ //LogUtils.d("HippyListView", "onViewAbandon start " + nodeHolder.mBindNode.toString());
108
+ nodeHolder.mBindNode.setLazy(true);
109
+ RenderNode parentNode = nodeHolder.mBindNode.getParent();
110
+ if (parentNode != null) {
111
+ mHippyContext.getRenderManager().getControllerManager()
112
+ .deleteChild(parentNode.getId(), nodeHolder.mBindNode.getId());
113
+ }
114
+ //LogUtils.d("HippyListView", "onViewAbandon end " + nodeHolder.mBindNode.toString());
115
+ }
116
+ if (nodeHolder.mBindNode instanceof ListItemRenderNode) {
117
+ //LogUtils.d("HippyListView", "onViewAbandon start " + nodeHolder.mBindNode.toString());
118
+ ((ListItemRenderNode) nodeHolder.mBindNode).setRecycleItemTypeChangeListener(null);
119
+ }
120
+ super.onViewAbandon(viewHolder);
121
+ }
122
+
123
+ @Override
124
+ public void onBindContentView(ContentHolder holder, int position, int layoutType) {
125
+ NodeHolder contentHolder = (NodeHolder) holder;
126
+ //LogUtils.d("HippyListView", "onBindContentView : " + position);
127
+ if (contentHolder.isCreated) {
128
+ contentHolder.mBindNode.updateViewRecursive();
129
+ // mHippyContext.getGlobalConfigs().getLogAdapter().log(TAG," onBindContentView updateViewRecursive");
130
+ contentHolder.isCreated = false;
131
+ } else {
132
+ //step 1: diff
133
+ contentHolder.mBindNode.setLazy(true);
134
+ RenderNode toNode = null;
135
+ try {
136
+ toNode = mHippyContext.getRenderManager().getRenderNode(mParentRecyclerView.getId())
137
+ .getChildAt(position);
138
+ } catch (Throwable e) {
139
+ LogUtils.d("HippyListAdapter", "onBindContentView: " + e.getMessage());
140
+ }
141
+ //保护下
142
+ if (toNode == null) {
143
+ if(LogUtils.isDebug()){
144
+ Log.e("BindEvent","onBindContentView toNoe= null reutrn, position:"+position+",this:"+mParentRecyclerView.getId());
145
+ }
146
+ return;
147
+ }
148
+ toNode.setLazy(false);
149
+
150
+ //LogUtils.d("HippyListView", "toNode: " + toNode.toString());
151
+ // mHippyContext.getGlobalConfigs().getLogAdapter().log(TAG, "toNode: " + toNode.toString());
152
+ //LogUtils.d("HippyListView", "fromNode: " + contentHolder.mBindNode.toString());
153
+ // mHippyContext.getGlobalConfigs().getLogAdapter().log(TAG,"fromNode: " + contentHolder.mBindNode.toString());
154
+
155
+ ArrayList<DiffUtils.PatchType> patchTypes = DiffUtils.diff(contentHolder.mBindNode, toNode);
156
+ //LogUtils.d("HippyListView", " DiffUtils.diff position: " + position);
157
+
158
+ // for (DiffUtils.PatchType patchType : patchTypes)
159
+ // {
160
+ // LogUtils.d("HippyListView", patchType.mPatch.toString());
161
+ //// mHippyContext.getGlobalConfigs().getLogAdapter().log(TAG, patchType.mPatch.toString());
162
+ // }
163
+
164
+ //step:2 delete unUseful views
165
+ DiffUtils.deleteViews(mHippyContext.getRenderManager().getControllerManager(), patchTypes);
166
+ //LogUtils.d("HippyListView", " deleteViews position: " + position);
167
+ // mHippyContext.getGlobalConfigs().getLogAdapter().log(TAG, " deleteViews position: " + position);
168
+ //step:3 replace id
169
+ DiffUtils.replaceIds(mHippyContext.getRenderManager().getControllerManager(), patchTypes);
170
+ //LogUtils.d("HippyListView", " replaceIds position: " + position);
171
+ // mHippyContext.getGlobalConfigs().getLogAdapter().log(TAG, " replaceIds position: " + position);
172
+ //step:4 create view is do not reUse
173
+ DiffUtils.createView(patchTypes);
174
+ //LogUtils.d("HippyListView", " createView position: " + position);
175
+ // mHippyContext.getGlobalConfigs().getLogAdapter().log(TAG, " createView position: " + position);
176
+ //step:5 patch the dif result
177
+ DiffUtils.doPatch(mHippyContext.getRenderManager().getControllerManager(), patchTypes);
178
+ //LogUtils.d("HippyListView", " doPatch position: " + position);
179
+ // mHippyContext.getGlobalConfigs().getLogAdapter().log(TAG, " doPatch position: " + position);
180
+
181
+ contentHolder.mBindNode = toNode;
182
+
183
+ if(contentHolder.mContentView instanceof HippyListItemView){
184
+ ((HippyListItemView) contentHolder.mContentView).validSize(position);
185
+ }
186
+ }
187
+ if (contentHolder.mBindNode instanceof ListItemRenderNode) {
188
+ ((ListItemRenderNode) contentHolder.mBindNode).setRecycleItemTypeChangeListener(this);
189
+ }
190
+ //zhaopeng add
191
+ if(mParentRecyclerView instanceof TVRecyclerView && ((TVRecyclerView) mParentRecyclerView).isListenBoundEvent()) {
192
+ sendOnBindEvent(mParentRecyclerView, position);
193
+ }
194
+ }
195
+
196
+
197
+ @Override
198
+ public boolean hasCustomRecycler() {
199
+ return true;
200
+ }
201
+
202
+ RecyclerViewBase.ViewHolder findBestHolderRecursive(int position, int targetType,
203
+ RecyclerViewBase.Recycler recycler) {
204
+ RecyclerViewBase.ViewHolder matchHolder = getScrapViewForPositionInner(position, targetType,
205
+ recycler);
206
+ if (matchHolder == null) {
207
+ matchHolder = recycler.getViewHolderForPosition(position);
208
+ }
209
+
210
+ if (matchHolder != null && ((NodeHolder) matchHolder.mContentHolder).mBindNode.isDelete()) {
211
+ matchHolder = findBestHolderRecursive(position, targetType, recycler);
212
+ }
213
+
214
+ return matchHolder;
215
+ }
216
+
217
+ ArrayList<RecyclerViewBase.ViewHolder> mListViewHolder;
218
+
219
+ public int getRecyclerItemCount() {
220
+ mListViewHolder = new ArrayList<>();
221
+
222
+ RecyclerViewBase.Recycler recycler = mParentRecyclerView.getRecycler();
223
+
224
+ mListViewHolder.addAll(recycler.mAttachedScrap);
225
+
226
+ mListViewHolder.addAll(recycler.mCachedViews);
227
+
228
+ for (int i = 0; i < recycler.getRecycledViewPool().mScrap.size(); i++) {
229
+ mListViewHolder.addAll(recycler.getRecycledViewPool().mScrap.valueAt(i));
230
+ }
231
+ return mListViewHolder.size() + mParentRecyclerView.getChildCount();
232
+ }
233
+
234
+ //zhaopeng add
235
+ private HippyViewEvent mBindEvent,mUnbindEvent;
236
+ // private HippyMap mBindEventMap,mUnbindEventMap;
237
+ private void sendOnBindEvent(View view, int position){
238
+ if(mBindEvent == null){
239
+ mBindEvent = new HippyViewEvent("onBindItem");
240
+ }
241
+
242
+ HippyMap map = new HippyMap();
243
+ map.pushInt("position",position);
244
+ if(LogUtils.isDebug()){
245
+ Log.e("BindEvent","+++++onBind position:"+position+",this:"+mParentRecyclerView.getId());
246
+ }
247
+ mBindEvent.send(view,map);
248
+ }
249
+
250
+ private void sendUnBindEvent(View view, int position){
251
+ if(mUnbindEvent == null){
252
+ mUnbindEvent = new HippyViewEvent("onUnbindItem");
253
+ }
254
+ HippyMap map = new HippyMap();
255
+ map.pushInt("position",position);
256
+ if(LogUtils.isDebug()){
257
+ Log.d("BindEvent","-----unBind position:"+position+",this:"+mParentRecyclerView.getId());
258
+ }
259
+ mUnbindEvent.send(view,map);
260
+ }
261
+ //zhaopeng add end
262
+
263
+ View getRecyclerItemView(int index) {
264
+ if (index < mListViewHolder.size()) {
265
+ return mListViewHolder.get(index).mContent;
266
+ } else {
267
+ return mParentRecyclerView.getChildAt(index - mListViewHolder.size());
268
+ }
269
+
270
+ }
271
+
272
+ @Override
273
+ public RecyclerViewBase.ViewHolder findBestHolderForPosition(int position,
274
+ RecyclerViewBase.Recycler recycler) {
275
+ LogUtils.d("HippyListView", "findBestHolderForPosition start : " + position);
276
+ mRecycler = recycler;
277
+ int targetType = getItemViewType(position);
278
+ RecyclerViewBase.ViewHolder matchHolder = findBestHolderRecursive(position, targetType,
279
+ recycler);
280
+ LogUtils.d("HippyListView", "findBestHolderForPosition end : " + position);
281
+ return matchHolder;
282
+ }
283
+
284
+ @Override
285
+ public RecyclerViewBase.ViewHolder findSuspendHolderForPosition(int position,
286
+ RecyclerViewBase.Recycler recycler) {
287
+ mRecycler = recycler;
288
+ int targetType = getItemViewType(position);
289
+ RecyclerViewBase.ViewHolder matchHolder = getScrapViewForPositionInner(position, targetType,
290
+ recycler);
291
+ if (matchHolder != null && ((NodeHolder) matchHolder.mContentHolder).mBindNode.isDelete()) {
292
+ return null;
293
+ }
294
+ return matchHolder;
295
+ }
296
+
297
+ private RecyclerViewBase.ViewHolder getScrapViewForPositionInner(int position, int type,
298
+ RecyclerViewBase.Recycler recycler) {
299
+ if (mHippyContext.getRenderManager().getRenderNode(mParentRecyclerView.getId()) == null
300
+ ||
301
+ mHippyContext.getRenderManager().getRenderNode(mParentRecyclerView.getId()).getChildCount()
302
+ <= position) {
303
+ return null;
304
+ }
305
+ final int scrapCount = recycler.mAttachedScrap.size();
306
+ // Try first for an exact, non-invalid match from scrap.
307
+ for (int i = 0; i < scrapCount; i++) {
308
+ final RecyclerViewBase.ViewHolder holder = recycler.mAttachedScrap.get(i);
309
+ if (holder.getPosition() == position && !holder.isInvalid() && (!holder.isRemoved())) {
310
+ if (holder.getItemViewType() == type && holder.mContentHolder instanceof NodeHolder) {
311
+ RenderNode holderNode = ((NodeHolder) holder.mContentHolder).mBindNode;
312
+ RenderNode toNode = mHippyContext.getRenderManager()
313
+ .getRenderNode(mParentRecyclerView.getId()).getChildAt(position);
314
+ if (holderNode == toNode) {
315
+ recycler.mAttachedScrap.remove(i);
316
+ holder.setScrapContainer(null);
317
+ return holder;
318
+ }
319
+ }
320
+ }
321
+ }
322
+ // Search in our first-level recycled view cache.
323
+ final int cacheSize = recycler.mCachedViews.size();
324
+ for (int i = 0; i < cacheSize; i++) {
325
+ final RecyclerViewBase.ViewHolder holder = recycler.mCachedViews.get(i);
326
+ if (holder.getPosition() == position && holder.getItemViewType() == type && !holder
327
+ .isInvalid()
328
+ && holder.mContentHolder instanceof NodeHolder) {
329
+ RenderNode holderNode = ((NodeHolder) holder.mContentHolder).mBindNode;
330
+ RenderNode toNode = mHippyContext.getRenderManager()
331
+ .getRenderNode(mParentRecyclerView.getId()).getChildAt(position);
332
+ if (holderNode == toNode) {
333
+ recycler.mCachedViews.remove(i);
334
+ return holder;
335
+ }
336
+ }
337
+ }
338
+ // Give up. Head to the shared pool.
339
+ return this.getRecycledViewFromPoolInner(recycler.getRecycledViewPool(), type, position);
340
+ }
341
+
342
+ private RecyclerViewBase.ViewHolder getRecycledViewFromPoolInner(
343
+ RecyclerViewBase.RecycledViewPool pool, int viewType, int position) {
344
+ if (pool != null) {
345
+ final ArrayList<RecyclerViewBase.ViewHolder> scrapHeap = pool.mScrap.get(viewType);
346
+ if (scrapHeap != null && !scrapHeap.isEmpty()) {
347
+ // traverse all scrap
348
+ for (RecyclerViewBase.ViewHolder holder : scrapHeap) {
349
+ if (holder.getItemViewType() == viewType && holder.mContentHolder instanceof NodeHolder) {
350
+ RenderNode holderNode = ((NodeHolder) holder.mContentHolder).mBindNode;
351
+ RenderNode toNode = mHippyContext.getRenderManager()
352
+ .getRenderNode(mParentRecyclerView.getId()).getChildAt(position);
353
+ if (holderNode == toNode) {
354
+ scrapHeap.remove(holder);
355
+ return holder;
356
+ }
357
+ }
358
+ }
359
+ }
360
+ }
361
+ return null;
362
+ }
363
+
364
+ private void checkHolderType(int oldType, int newType, ListItemRenderNode listItemRenderNode) {
365
+ //do checkHolderType onScreen
366
+ int count = mParentRecyclerView.getChildCount();
367
+ for (int i = 0; i < count; i++) {
368
+ final RecyclerViewBase.ViewHolder holder = mParentRecyclerView
369
+ .getChildViewHolder(mParentRecyclerView.getChildAt(i));
370
+ if (holder.getItemViewType() == oldType && holder.mContentHolder instanceof NodeHolder) {
371
+ RenderNode holderNode = ((NodeHolder) holder.mContentHolder).mBindNode;
372
+ if (holderNode == listItemRenderNode) {
373
+ holder.setItemViewType(newType);
374
+ return;
375
+ }
376
+ }
377
+ }
378
+
379
+ //do checkHolderType inCache
380
+ final int scrapCount = mRecycler.mAttachedScrap.size();
381
+ // Try first for an exact, non-invalid match from scrap.
382
+ for (int i = 0; i < scrapCount; i++) {
383
+ final RecyclerViewBase.ViewHolder holder = mRecycler.mAttachedScrap.get(i);
384
+
385
+ if (holder.getItemViewType() == oldType && holder.mContentHolder instanceof NodeHolder) {
386
+ RenderNode holderNode = ((NodeHolder) holder.mContentHolder).mBindNode;
387
+ if (holderNode == listItemRenderNode) {
388
+ holder.setItemViewType(newType);
389
+ return;
390
+ }
391
+ }
392
+ }
393
+
394
+ // Search in our first-level recycled view cache.
395
+ final int cacheSize = mRecycler.mCachedViews.size();
396
+ for (int i = 0; i < cacheSize; i++) {
397
+ final RecyclerViewBase.ViewHolder holder = mRecycler.mCachedViews.get(i);
398
+ if (holder.getItemViewType() == oldType && holder.mContentHolder instanceof NodeHolder) {
399
+ RenderNode holderNode = ((NodeHolder) holder.mContentHolder).mBindNode;
400
+ if (holderNode == listItemRenderNode) {
401
+ holder.setItemViewType(newType);
402
+ return;
403
+ }
404
+ }
405
+ }
406
+
407
+ // Give up. Head to the shared pool.
408
+ if (mRecycler.getRecycledViewPool() != null) {
409
+ final ArrayList<RecyclerViewBase.ViewHolder> scrapHeap = mRecycler
410
+ .getRecycledViewPool().mScrap.get(oldType);
411
+ if (scrapHeap != null && !scrapHeap.isEmpty()) {
412
+ // traverse all scrap
413
+ for (RecyclerViewBase.ViewHolder holder : scrapHeap) {
414
+ if (holder.getItemViewType() == oldType && holder.mContentHolder instanceof NodeHolder) {
415
+ RenderNode holderNode = ((NodeHolder) holder.mContentHolder).mBindNode;
416
+ if (holderNode == listItemRenderNode) {
417
+ holder.setItemViewType(newType);
418
+ scrapHeap.remove(holder);
419
+ mRecycler.getRecycledViewPool().getScrapHeapForType(newType).add(holder);
420
+ return;
421
+ }
422
+ }
423
+ }
424
+ }
425
+ }
426
+ }
427
+
428
+ @Override
429
+ public int getCustomHeaderViewWidth() {
430
+ RenderNode listNode = mHippyContext.getRenderManager()
431
+ .getRenderNode(mParentRecyclerView.getId());
432
+ if (listNode != null && listNode.getChildCount() > 0) {
433
+ RenderNode listItemNode = listNode.getChildAt(0);
434
+ if (listItemNode instanceof PullHeaderRenderNode) {
435
+ return listItemNode.getWidth();
436
+ }
437
+ }
438
+
439
+ return 0;
440
+ }
441
+
442
+ @Override
443
+ public int getCustomFooterViewWidth() {
444
+ RenderNode listNode = mHippyContext.getRenderManager()
445
+ .getRenderNode(mParentRecyclerView.getId());
446
+ if (listNode != null && listNode.getChildCount() > 0) {
447
+ RenderNode listItemNode = listNode.getChildAt(listNode.getChildCount() - 1);
448
+ if (listItemNode instanceof PullFooterRenderNode) {
449
+ return listItemNode.getWidth();
450
+ }
451
+ }
452
+
453
+ return 0;
454
+ }
455
+
456
+ @Override
457
+ public int getCustomHeaderViewHeight() {
458
+ RenderNode listNode = mHippyContext.getRenderManager()
459
+ .getRenderNode(mParentRecyclerView.getId());
460
+ if (listNode != null && listNode.getChildCount() > 0) {
461
+ RenderNode listItemNode = listNode.getChildAt(0);
462
+ if (listItemNode instanceof PullHeaderRenderNode) {
463
+ return listItemNode.getHeight();
464
+ }
465
+ }
466
+
467
+ return 0;
468
+ }
469
+
470
+ @Override
471
+ public int getCustomFooterViewHeight() {
472
+ RenderNode listNode = mHippyContext.getRenderManager()
473
+ .getRenderNode(mParentRecyclerView.getId());
474
+ if (listNode != null && listNode.getChildCount() > 0) {
475
+ RenderNode listItemNode = listNode.getChildAt(listNode.getChildCount() - 1);
476
+ if (listItemNode instanceof PullFooterRenderNode) {
477
+ return listItemNode.getHeight();
478
+ }
479
+ }
480
+
481
+ return 0;
482
+ }
483
+
484
+ @Override
485
+ public int getItemHeight(int index) {
486
+ RenderNode listNode = mHippyContext.getRenderManager()
487
+ .getRenderNode(mParentRecyclerView.getId());
488
+ if (listNode != null && listNode.getChildCount() > index && index >= 0) {
489
+ RenderNode listItemNode = listNode.getChildAt(index);
490
+ if (listItemNode != null) {
491
+ return listItemNode.getHeight();
492
+ }
493
+ }
494
+ return 0;
495
+ }
496
+
497
+ @Override
498
+ public int getItemWidth(int index) {
499
+ RenderNode listNode = mHippyContext.getRenderManager()
500
+ .getRenderNode(mParentRecyclerView.getId());
501
+ if (listNode != null && listNode.getChildCount() > index && index >= 0) {
502
+ RenderNode listItemNode = listNode.getChildAt(index);
503
+ if (listItemNode != null) {
504
+ return listItemNode.getWidth();
505
+ }
506
+ }
507
+ return 0;
508
+ }
509
+
510
+ @Override
511
+ public int getTotalHeight() {
512
+ if (isAutoCalculateItemHeight()) {
513
+ mContentHeight = -1;
514
+ }
515
+ if (mContentHeight == -1) {
516
+ int itemCount = getItemCount();
517
+ mContentHeight = 0;
518
+
519
+ if (mParentRecyclerView.mLayoutType == RecyclerViewBase.LAYOUT_TYPE_LIST) {
520
+ for (int i = 0; i < itemCount; i++) {
521
+ if (mParentRecyclerView.mLayout.canScrollHorizontally()) {
522
+ mContentHeight += getItemWidth(i);
523
+ mContentHeight += getItemMaigin(LOCATION_LEFT, i);
524
+ mContentHeight += getItemMaigin(LOCATION_RIGHT, i);
525
+ } else {
526
+ mContentHeight += getItemHeight(i);
527
+ mContentHeight += getItemMaigin(LOCATION_TOP, i);
528
+ mContentHeight += getItemMaigin(LOCATION_BOTTOM, i);
529
+ }
530
+ }
531
+ }
532
+ }
533
+
534
+ int footerViewSize = mParentRecyclerView.mLayout.canScrollHorizontally() ?
535
+ getCustomFooterViewWidth() : getCustomFooterViewHeight();
536
+ return mContentHeight - footerViewSize;
537
+ }
538
+
539
+ @Override
540
+ public int getItemCount() {
541
+ RenderNode listNode = mHippyContext.getRenderManager()
542
+ .getRenderNode(mParentRecyclerView.getId());
543
+ if (listNode != null) {
544
+ return listNode.getChildCount();
545
+ }
546
+ return super.getItemCount();
547
+ }
548
+
549
+ @Override
550
+ public int getItemViewType(int index) {
551
+ RenderNode listViewNode = mHippyContext.getRenderManager()
552
+ .getRenderNode(mParentRecyclerView.getId());
553
+ if (listViewNode != null && listViewNode.getChildCount() > index) {
554
+ RenderNode listItemNode = mHippyContext.getRenderManager()
555
+ .getRenderNode(mParentRecyclerView.getId()).getChildAt(index);
556
+ if (listItemNode != null) {
557
+ if (listItemNode instanceof PullFooterRenderNode) {
558
+ return RecyclerViewBase.ViewHolder.TYPE_CUSTOM_FOOTER;
559
+ }
560
+
561
+ if (listItemNode instanceof PullHeaderRenderNode) {
562
+ return RecyclerViewBase.ViewHolder.TYPE_CUSTOM_HEADERE;
563
+ }
564
+
565
+ if (listItemNode.getProps() != null) {
566
+ HippyMap listItemProps = listItemNode.getProps();
567
+ if (listItemProps.get(ListItemRenderNode.ITEM_VIEW_TYPE) != null) {
568
+ return listItemProps.getInt(ListItemRenderNode.ITEM_VIEW_TYPE);
569
+ }
570
+ }
571
+ }
572
+ }
573
+ return super.getItemViewType(index);
574
+ }
575
+
576
+ @Override
577
+ public boolean isSuspentedItem(int pos) {
578
+ RenderNode listNode = mHippyContext.getRenderManager()
579
+ .getRenderNode(mParentRecyclerView.getId());
580
+ if (listNode != null && listNode.getChildCount() > pos) {
581
+ RenderNode listItemNode = listNode.getChildAt(pos);
582
+ if (listItemNode instanceof ListItemRenderNode) {
583
+ return ((ListItemRenderNode) listItemNode).shouldSticky();
584
+ }
585
+ }
586
+ return super.isSuspentedItem(pos);
587
+ }
588
+
589
+ @Override
590
+ public boolean isAutoCalculateItemHeight() {
591
+ return true;
592
+ }
593
+
594
+ @Override
595
+ public void onRecycleItemTypeChanged(int oldType, int newType, ListItemRenderNode listItemNode) {
596
+ checkHolderType(oldType, newType, listItemNode);
597
+ }
598
+
599
+ @Override
600
+ public void notifyEndReached() {
601
+ getOnEndReachedEvent().send(mParentRecyclerView, null);
602
+ getOnLoadMoreEvent().send(mParentRecyclerView, null);
603
+ }
604
+
605
+ @Override
606
+ public int getPreloadThresholdInItemNumber() {
607
+ return mPreloadItemNum;
608
+ }
609
+
610
+ private Runnable preLoadTask;
611
+
612
+ @Override
613
+ public void onPreload() {
614
+ if(preLoadTask != null){
615
+ mParentRecyclerView.removeCallbacks(preLoadTask);
616
+ }
617
+ preLoadTask = new Runnable() {
618
+ @Override
619
+ public void run() {
620
+ Log.e("HippyListAdapter","onPreload send event itemCount:"+getItemCount());
621
+ getOnEndReachedEvent().send(mParentRecyclerView, null);
622
+ getOnLoadMoreEvent().send(mParentRecyclerView, null);
623
+ }
624
+ };
625
+ //XXX zhaopeng 这里添加一个延迟,防止多次加载数据
626
+ mParentRecyclerView.postDelayed(preLoadTask,300);
627
+ }
628
+
629
+
630
+ protected void setPreloadItemNumber(int preloadItemNum) {
631
+ mPreloadItemNum = preloadItemNum;
632
+ }
633
+
634
+ protected HippyViewEvent getOnEndReachedEvent() {
635
+ if (onEndReachedEvent == null) {
636
+ onEndReachedEvent = new HippyViewEvent("onEndReached");
637
+ }
638
+ return onEndReachedEvent;
639
+ }
640
+
641
+ protected HippyViewEvent getOnLoadMoreEvent() {
642
+ if (onLoadMoreEvent == null) {
643
+ onLoadMoreEvent = new HippyViewEvent("onLoadMore");
644
+ }
645
+ return onLoadMoreEvent;
646
+ }
647
+ }