@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.
- package/package.json +1 -1
- package/rules/.clinerules +27 -4
- package/rules/.cursorrules +27 -4
- package/rules/.github/copilot-instructions.md +27 -4
- package/rules/.source/hippy/extend_views/CoverFlowHorizontalView.java +203 -0
- package/rules/.source/hippy/extend_views/CoverFlowVerticalView.java +203 -0
- package/rules/.source/hippy/extend_views/CoverFlowViewController.java +195 -0
- package/rules/.source/hippy/extend_views/EngineRootView.java +125 -0
- package/rules/.source/hippy/extend_views/ExtendTag.java +83 -0
- package/rules/.source/hippy/extend_views/FocusSearchHelper.java +124 -0
- package/rules/.source/hippy/extend_views/IRecyclerItemView.java +12 -0
- package/rules/.source/hippy/extend_views/JSEventHandleView.java +5 -0
- package/rules/.source/hippy/extend_views/MarqueeRelayManager.java +133 -0
- package/rules/.source/hippy/extend_views/MarqueeRelayTextView.java +211 -0
- package/rules/.source/hippy/extend_views/ProgressBarView.java +83 -0
- package/rules/.source/hippy/extend_views/ProgressBarViewController.java +145 -0
- package/rules/.source/hippy/extend_views/SeekBarView.java +104 -0
- package/rules/.source/hippy/extend_views/SeekBarViewController.java +218 -0
- package/rules/.source/hippy/extend_views/StateImageView.java +149 -0
- package/rules/.source/hippy/extend_views/StateImageViewController.java +34 -0
- package/rules/.source/hippy/extend_views/TVButtonView.java +314 -0
- package/rules/.source/hippy/extend_views/TVButtonViewController.java +89 -0
- package/rules/.source/hippy/extend_views/TVTextView.java +684 -0
- package/rules/.source/hippy/extend_views/TVViewActor.java +811 -0
- package/rules/.source/hippy/extend_views/TVViewActorHost.java +6 -0
- package/rules/.source/hippy/extend_views/TVViewActor/346/216/245/345/205/245.md +66 -0
- package/rules/.source/hippy/extend_views/TemplateUtil.java +336 -0
- package/rules/.source/hippy/extend_views/TextButtonNode.java +47 -0
- package/rules/.source/hippy/extend_views/TextViewController.java +377 -0
- package/rules/.source/hippy/extend_views/fastlist/CenterFlyInAnimator.java +96 -0
- package/rules/.source/hippy/extend_views/fastlist/ChildOnScreenScroller.java +548 -0
- package/rules/.source/hippy/extend_views/fastlist/ClonedViewTag.java +17 -0
- package/rules/.source/hippy/extend_views/fastlist/EventDeliverer.java +55 -0
- package/rules/.source/hippy/extend_views/fastlist/FastAdapter.java +4683 -0
- package/rules/.source/hippy/extend_views/fastlist/FastAdapterUtil.java +982 -0
- package/rules/.source/hippy/extend_views/fastlist/FastFlexNode.java +48 -0
- package/rules/.source/hippy/extend_views/fastlist/FastFlexView.java +873 -0
- package/rules/.source/hippy/extend_views/fastlist/FastFlexViewController.java +130 -0
- package/rules/.source/hippy/extend_views/fastlist/FastItemNode.java +67 -0
- package/rules/.source/hippy/extend_views/fastlist/FastItemView.java +306 -0
- package/rules/.source/hippy/extend_views/fastlist/FastItemViewController.java +106 -0
- package/rules/.source/hippy/extend_views/fastlist/FastListModule.java +95 -0
- package/rules/.source/hippy/extend_views/fastlist/FastListNode.java +90 -0
- package/rules/.source/hippy/extend_views/fastlist/FastListView.java +2466 -0
- package/rules/.source/hippy/extend_views/fastlist/FastListViewController.java +1038 -0
- 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
- package/rules/.source/hippy/extend_views/fastlist/FastPendingView.java +47 -0
- package/rules/.source/hippy/extend_views/fastlist/ItemDecorations.java +71 -0
- package/rules/.source/hippy/extend_views/fastlist/ItemStoreNode.java +64 -0
- package/rules/.source/hippy/extend_views/fastlist/ItemStoreView.java +13 -0
- package/rules/.source/hippy/extend_views/fastlist/ItemStoreViewController.java +45 -0
- package/rules/.source/hippy/extend_views/fastlist/ListItemHolder.java +7 -0
- package/rules/.source/hippy/extend_views/fastlist/ListViewControlProp.java +41 -0
- package/rules/.source/hippy/extend_views/fastlist/MouseRecycleView.java +509 -0
- package/rules/.source/hippy/extend_views/fastlist/OnFastItemClickListener.java +12 -0
- package/rules/.source/hippy/extend_views/fastlist/OnFastItemFocusChangeListener.java +9 -0
- package/rules/.source/hippy/extend_views/fastlist/OnFastScrollStateChangedListener.java +7 -0
- package/rules/.source/hippy/extend_views/fastlist/PendingListNode.java +18 -0
- package/rules/.source/hippy/extend_views/fastlist/PendingViewController.java +13 -0
- package/rules/.source/hippy/extend_views/fastlist/PostHandlerView.java +6 -0
- package/rules/.source/hippy/extend_views/fastlist/PostTaskHolder.java +20 -0
- package/rules/.source/hippy/extend_views/fastlist/ReplaceChildController.java +105 -0
- package/rules/.source/hippy/extend_views/fastlist/ReplaceChildView.java +312 -0
- package/rules/.source/hippy/extend_views/fastlist/TVListView.java +3692 -0
- package/rules/.source/hippy/extend_views/fastlist/TemplateCodeParser.java +247 -0
- package/rules/.source/hippy/extend_views/fastlist/Utils.java +572 -0
- package/rules/.source/hippy/extend_views/fastlist/ViewTag.java +317 -0
- package/rules/.source/hippy/extend_views/fastlist/VirtualListView.java +8 -0
- package/rules/.source/hippy/extend_views/fastlist/diff/FastListDataBindingHelper.java +320 -0
- package/rules/.source/hippy/extend_views/fastlist/diff/KeyDiffHelper.java +289 -0
- package/rules/.source/hippy/extend_views/fastlist/diff/NoKeyDiffHelper.java +278 -0
- package/rules/.source/hippy/extend_views/tag/FontTag.java +53 -0
- package/rules/.source/hippy/extend_views/tag/HtmlTag.java +191 -0
- package/rules/.source/hippy/extend_views/tag/HtmlTagHandler.java +185 -0
- package/rules/.source/hippy/extend_views/tag/SpanTag.java +160 -0
- package/rules/.source/hippy/extend_views/tag/TextFontSpan.java +102 -0
- package/rules/.source/hippy/extend_views/waterfall/Chunk.java +10 -0
- package/rules/.source/hippy/extend_views/waterfall/ChunkGroup.java +5 -0
- package/rules/.source/hippy/extend_views/waterfall/Section.java +4 -0
- package/rules/.source/hippy/extend_views/waterfall/Tabs.java +5 -0
- package/rules/.source/hippy/extend_views/waterfall/WaterfallUtils.java +26 -0
- package/rules/.source/hippy/hippy_uimanager/ControllerHolder.java +30 -0
- package/rules/.source/hippy/hippy_uimanager/ControllerManager.java +651 -0
- package/rules/.source/hippy/hippy_uimanager/ControllerRegistry.java +102 -0
- package/rules/.source/hippy/hippy_uimanager/ControllerUpdateManger.java +252 -0
- package/rules/.source/hippy/hippy_uimanager/CustomControllerHelper.java +425 -0
- package/rules/.source/hippy/hippy_uimanager/DiffUtils.java +526 -0
- package/rules/.source/hippy/hippy_uimanager/ExtendViewGroup.java +36 -0
- package/rules/.source/hippy/hippy_uimanager/HippyCustomViewCreator.java +29 -0
- package/rules/.source/hippy/hippy_uimanager/HippyGroupController.java +83 -0
- package/rules/.source/hippy/hippy_uimanager/HippyViewBase.java +27 -0
- package/rules/.source/hippy/hippy_uimanager/HippyViewController.java +2189 -0
- package/rules/.source/hippy/hippy_uimanager/HippyViewEvent.java +52 -0
- package/rules/.source/hippy/hippy_uimanager/IHippyZIndexViewGroup.java +24 -0
- package/rules/.source/hippy/hippy_uimanager/InternalExtendViewUtil.java +395 -0
- package/rules/.source/hippy/hippy_uimanager/ListItemRenderNode.java +143 -0
- package/rules/.source/hippy/hippy_uimanager/ListViewRenderNode.java +44 -0
- package/rules/.source/hippy/hippy_uimanager/MatrixUtil.java +470 -0
- package/rules/.source/hippy/hippy_uimanager/NativeGestureDispatcher.java +349 -0
- package/rules/.source/hippy/hippy_uimanager/NativeGestureProcessor.java +188 -0
- package/rules/.source/hippy/hippy_uimanager/PullFooterRenderNode.java +43 -0
- package/rules/.source/hippy/hippy_uimanager/PullHeaderRenderNode.java +43 -0
- package/rules/.source/hippy/hippy_uimanager/RenderManager.java +304 -0
- package/rules/.source/hippy/hippy_uimanager/RenderNode.java +533 -0
- package/rules/.source/hippy/hippy_uimanager/StateView.java +17 -0
- package/rules/.source/hippy/hippy_uimanager/TransformUtil.java +125 -0
- package/rules/.source/hippy/hippy_uimanager/ViewGroupDrawingOrderHelper.java +108 -0
- package/rules/.source/hippy/hippy_uimanager/ViewStateProvider.java +10 -0
- package/rules/.source/hippy/hippy_views/audioview/AudioPlayManager.java +457 -0
- package/rules/.source/hippy/hippy_views/audioview/AudioView.java +225 -0
- package/rules/.source/hippy/hippy_views/audioview/AudioViewController.java +135 -0
- package/rules/.source/hippy/hippy_views/common/CommonBackgroundDrawable.java +58 -0
- package/rules/.source/hippy/hippy_views/common/CommonBorder.java +37 -0
- package/rules/.source/hippy/hippy_views/custom/HippyCustomPropsController.java +61 -0
- package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerListAdapter.java +399 -0
- package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerView.java +378 -0
- package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerViewController.java +187 -0
- package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerViewHolder.java +39 -0
- package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerViewWrapper.java +134 -0
- package/rules/.source/hippy/hippy_views/hippylist/NodePositionHelper.java +55 -0
- package/rules/.source/hippy/hippy_views/hippylist/PreloadHelper.java +54 -0
- package/rules/.source/hippy/hippy_views/hippylist/PullFooterEventHelper.java +61 -0
- package/rules/.source/hippy/hippy_views/hippylist/PullHeaderEventHelper.java +127 -0
- package/rules/.source/hippy/hippy_views/hippylist/RecyclerViewEventHelper.java +394 -0
- package/rules/.source/hippy/hippy_views/image/HippyContentDrawable.java +113 -0
- package/rules/.source/hippy/hippy_views/image/HippyImageView.java +1608 -0
- package/rules/.source/hippy/hippy_views/image/HippyImageViewController.java +382 -0
- package/rules/.source/hippy/hippy_views/image/IImageStateListener.java +7 -0
- package/rules/.source/hippy/hippy_views/list/ChildOnScreenScroller.java +255 -0
- package/rules/.source/hippy/hippy_views/list/HippyListAdapter.java +647 -0
- package/rules/.source/hippy/hippy_views/list/HippyListItemView.java +162 -0
- package/rules/.source/hippy/hippy_views/list/HippyListItemViewController.java +45 -0
- package/rules/.source/hippy/hippy_views/list/HippyListView.java +915 -0
- package/rules/.source/hippy/hippy_views/list/HippyListViewController.java +622 -0
- package/rules/.source/hippy/hippy_views/list/HippyRecycler.java +31 -0
- package/rules/.source/hippy/hippy_views/list/IRecycleItemTypeChange.java +23 -0
- package/rules/.source/hippy/hippy_views/list/ItemDecorations.java +70 -0
- package/rules/.source/hippy/hippy_views/list/NegativeLongKeyFlinger.java +156 -0
- package/rules/.source/hippy/hippy_views/list/NodeHolder.java +34 -0
- package/rules/.source/hippy/hippy_views/list/RecycleViewFlinger.java +126 -0
- package/rules/.source/hippy/hippy_views/list/TVRecyclerView.java +2070 -0
- package/rules/.source/hippy/hippy_views/list/TVSingleLineListView.java +15 -0
- package/rules/.source/hippy/hippy_views/modal/HippyModalHostManager.java +102 -0
- package/rules/.source/hippy/hippy_views/modal/HippyModalHostView.java +597 -0
- package/rules/.source/hippy/hippy_views/modal/ModalHostHelper.java +46 -0
- package/rules/.source/hippy/hippy_views/modal/ModalStyleNode.java +34 -0
- package/rules/.source/hippy/hippy_views/modal/RequestCloseEvent.java +32 -0
- package/rules/.source/hippy/hippy_views/modal/ShowEvent.java +31 -0
- package/rules/.source/hippy/hippy_views/navigator/Navigator.java +126 -0
- package/rules/.source/hippy/hippy_views/navigator/NavigatorController.java +120 -0
- package/rules/.source/hippy/hippy_views/refresh/HippyPullFooterView.java +47 -0
- package/rules/.source/hippy/hippy_views/refresh/HippyPullFooterViewController.java +65 -0
- package/rules/.source/hippy/hippy_views/refresh/HippyPullHeaderView.java +39 -0
- package/rules/.source/hippy/hippy_views/refresh/HippyPullHeaderViewController.java +104 -0
- package/rules/.source/hippy/hippy_views/refresh/RefreshWrapper.java +237 -0
- package/rules/.source/hippy/hippy_views/refresh/RefreshWrapperController.java +62 -0
- package/rules/.source/hippy/hippy_views/refresh/RefreshWrapperItemController.java +39 -0
- package/rules/.source/hippy/hippy_views/refresh/RefreshWrapperItemView.java +26 -0
- package/rules/.source/hippy/hippy_views/scroll/HippyHorizontalScrollView.java +500 -0
- package/rules/.source/hippy/hippy_views/scroll/HippyOnScrollHelper.java +39 -0
- package/rules/.source/hippy/hippy_views/scroll/HippyScrollView.java +46 -0
- package/rules/.source/hippy/hippy_views/scroll/HippyScrollViewController.java +178 -0
- package/rules/.source/hippy/hippy_views/scroll/HippyScrollViewEventHelper.java +92 -0
- package/rules/.source/hippy/hippy_views/scroll/HippyVerticalScrollView.java +522 -0
- package/rules/.source/hippy/hippy_views/text/HippyTextView.java +512 -0
- package/rules/.source/hippy/hippy_views/text/HippyTextViewController.java +77 -0
- package/rules/.source/hippy/hippy_views/textinput/HippyTextInput.java +668 -0
- package/rules/.source/hippy/hippy_views/textinput/HippyTextInputController.java +528 -0
- package/rules/.source/hippy/hippy_views/textinput/TextInputNode.java +115 -0
- package/rules/.source/hippy/hippy_views/videoview/APEZProvider.java +287 -0
- package/rules/.source/hippy/hippy_views/videoview/APKExpansionSupport.java +82 -0
- package/rules/.source/hippy/hippy_views/videoview/PivotPoint.java +13 -0
- package/rules/.source/hippy/hippy_views/videoview/ScalableType.java +34 -0
- package/rules/.source/hippy/hippy_views/videoview/ScalableVideoView.java +265 -0
- package/rules/.source/hippy/hippy_views/videoview/ScaleManager.java +191 -0
- package/rules/.source/hippy/hippy_views/videoview/Size.java +19 -0
- package/rules/.source/hippy/hippy_views/videoview/VideoHippyView.java +917 -0
- package/rules/.source/hippy/hippy_views/videoview/VideoHippyViewController.java +236 -0
- package/rules/.source/hippy/hippy_views/videoview/ZipResourceFile.java +427 -0
- package/rules/.source/hippy/hippy_views/view/CardRootView.java +28 -0
- package/rules/.source/hippy/hippy_views/view/CustomLayoutView.java +10 -0
- package/rules/.source/hippy/hippy_views/view/CustomNodeView.java +5 -0
- package/rules/.source/hippy/hippy_views/view/DialogViewGroup.java +113 -0
- package/rules/.source/hippy/hippy_views/view/HippyViewGroup.java +2042 -0
- package/rules/.source/hippy/hippy_views/view/HippyViewGroupController.java +583 -0
- package/rules/.source/hippy/hippy_views/view/WindowRoot.java +5 -0
- package/rules/.source/hippy/hippy_views/viewpager/HippyViewPager.java +308 -0
- package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerAdapter.java +148 -0
- package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerController.java +246 -0
- package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerItem.java +27 -0
- package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerItemController.java +42 -0
- package/rules/.source/hippy/hippy_views/viewpager/ViewPagerPageChangeListener.java +114 -0
- package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageItemExposureEvent.java +40 -0
- package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageScrollEvent.java +43 -0
- package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageScrollStateChangedEvent.java +42 -0
- package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageSelectedEvent.java +42 -0
- package/rules/.source/hippy/hippy_views/webview/HippyWebView.java +160 -0
- package/rules/.source/hippy/hippy_views/webview/HippyWebViewBridge.java +20 -0
- package/rules/.source/hippy/hippy_views/webview/HippyWebViewController.java +103 -0
- package/rules/.source/hippy/hippy_views/webview/HippyWebViewInner.java +77 -0
- package/rules/.windsurfrules +27 -4
- package/rules/AGENTS.md +27 -4
- package/rules/CLAUDE.md +27 -3
- 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
|
+
}
|