@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,873 @@
|
|
|
1
|
+
package com.tencent.extend.views.fastlist;
|
|
2
|
+
|
|
3
|
+
import android.content.Context;
|
|
4
|
+
import android.util.Log;
|
|
5
|
+
import android.view.View;
|
|
6
|
+
import android.view.ViewGroup;
|
|
7
|
+
|
|
8
|
+
import android.support.annotation.Nullable;
|
|
9
|
+
import android.support.v7.widget.RecyclerView;
|
|
10
|
+
|
|
11
|
+
import com.tencent.extend.views.fastlist.diff.FastListDataBindingHelper;
|
|
12
|
+
import com.tencent.mtt.hippy.HippyEngineContext;
|
|
13
|
+
import com.tencent.mtt.hippy.HippyInstanceContext;
|
|
14
|
+
import com.tencent.mtt.hippy.common.HippyArray;
|
|
15
|
+
import com.tencent.mtt.hippy.common.HippyMap;
|
|
16
|
+
import com.tencent.mtt.hippy.modules.Promise;
|
|
17
|
+
import com.tencent.mtt.hippy.uimanager.RenderNode;
|
|
18
|
+
import com.tencent.mtt.hippy.utils.ExtendUtil;
|
|
19
|
+
import com.tencent.mtt.hippy.utils.LogUtils;
|
|
20
|
+
import com.tencent.mtt.hippy.views.list.HippyRecycler;
|
|
21
|
+
import com.tencent.mtt.hippy.views.view.HippyViewGroup;
|
|
22
|
+
|
|
23
|
+
import java.util.ArrayList;
|
|
24
|
+
import java.util.Iterator;
|
|
25
|
+
|
|
26
|
+
public class FastFlexView extends HippyViewGroup implements FastPendingView,HippyRecycler, FastAdapter.ScrollTaskHandler {
|
|
27
|
+
public static final String TAG = "FastFlexLog";
|
|
28
|
+
private FastAdapter mAdapter;
|
|
29
|
+
private int[] padding = new int[4];
|
|
30
|
+
private int preferWidth = -1;
|
|
31
|
+
private int preferHeight = -1;
|
|
32
|
+
private boolean hasReset = false;
|
|
33
|
+
protected EventDeliverer eventDeliverer;
|
|
34
|
+
|
|
35
|
+
private ArrayList<FastAdapter.Holder> cacheHolders;
|
|
36
|
+
|
|
37
|
+
private boolean useDiff = false;
|
|
38
|
+
private String keyName;
|
|
39
|
+
private boolean isAttached = false;
|
|
40
|
+
|
|
41
|
+
public boolean isUseDiff() {
|
|
42
|
+
return useDiff;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
private boolean enablePlaceholder = FastAdapter.CHILD_LIST_PLACEHOLDER_ENABLE;
|
|
46
|
+
|
|
47
|
+
public FastFlexView(Context context) {
|
|
48
|
+
super(context);
|
|
49
|
+
setFocusable(false);
|
|
50
|
+
setClipChildren(false);
|
|
51
|
+
eventDeliverer = new EventDeliverer(Utils.getHippyContext(context));
|
|
52
|
+
init();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
public void setUseDiff(boolean useDiff) {
|
|
56
|
+
this.useDiff = useDiff;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
public void setKeyName(String keyName) {
|
|
60
|
+
this.keyName = keyName;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@Override
|
|
64
|
+
public EventDeliverer getEventDeliverer() {
|
|
65
|
+
return eventDeliverer;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@Override
|
|
69
|
+
public void onResetBeforeCache() {
|
|
70
|
+
super.onResetBeforeCache();
|
|
71
|
+
if(LogUtils.isDebug()) {
|
|
72
|
+
Log.d(TAG, "DebugPool flexView onResetBeforeCache:"+Utils.hashCode(this)+",rootList:"+mAdapter.getRootListView());
|
|
73
|
+
}
|
|
74
|
+
if(!hasReset) {
|
|
75
|
+
resetChildren();
|
|
76
|
+
hasReset = true;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
private int mHandleEventNodeId = -1;
|
|
81
|
+
@Override
|
|
82
|
+
public void setHandleEventNodeId(int id) {
|
|
83
|
+
this.mHandleEventNodeId = id;
|
|
84
|
+
if(mAdapter != null){
|
|
85
|
+
mAdapter.rootListNodeID = id;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
public void setEnablePlaceholder(boolean b){
|
|
90
|
+
this.enablePlaceholder = b;
|
|
91
|
+
if (mAdapter != null) {
|
|
92
|
+
mAdapter.setEnablePlaceholder(b);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
@Override
|
|
97
|
+
public void pausePostTask() {
|
|
98
|
+
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
@Override
|
|
102
|
+
public void resumePostTask() {
|
|
103
|
+
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
@Override
|
|
107
|
+
public HippyArray getItemListData() {
|
|
108
|
+
return mAdapter != null ? mAdapter.dataList : null;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
@Override
|
|
112
|
+
public void notifySaveState() {
|
|
113
|
+
super.notifySaveState();
|
|
114
|
+
if(cacheHolders != null && mAdapter != null) {
|
|
115
|
+
for (int i = 0; i < cacheHolders.size(); i ++){
|
|
116
|
+
final View view = cacheHolders.get(i).itemView;
|
|
117
|
+
if(view instanceof HippyRecycler){
|
|
118
|
+
if(LogUtils.isDebug()) {
|
|
119
|
+
Log.d(TAG, "++DebugPool flexView notifySaveState child:"+view);
|
|
120
|
+
}
|
|
121
|
+
((HippyRecycler) view).notifySaveState();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
@Override
|
|
128
|
+
public void notifyRestoreState() {
|
|
129
|
+
super.notifyRestoreState();
|
|
130
|
+
if(cacheHolders != null && mAdapter != null) {
|
|
131
|
+
for (int i = 0; i < cacheHolders.size(); i ++){
|
|
132
|
+
final View view = cacheHolders.get(i).itemView;
|
|
133
|
+
if(view instanceof HippyRecycler){
|
|
134
|
+
if(LogUtils.isDebug()) {
|
|
135
|
+
Log.d(TAG, "--DebugPool flexView notifyRestoreState child:"+view);
|
|
136
|
+
}
|
|
137
|
+
((HippyRecycler) view).notifyRestoreState();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
void resetChildren(){
|
|
144
|
+
if(cacheHolders != null && mAdapter != null) {
|
|
145
|
+
for (int i = 0; i < cacheHolders.size(); i ++){
|
|
146
|
+
final FastAdapter.Holder holder = cacheHolders.get(i);
|
|
147
|
+
//onViewRecycled生命周期方法在这里调用
|
|
148
|
+
mAdapter.onViewDetachedFromWindow(holder);
|
|
149
|
+
mAdapter.onViewRecycled(holder);
|
|
150
|
+
final View view = holder.itemView;
|
|
151
|
+
if(view instanceof HippyRecycler){
|
|
152
|
+
if(LogUtils.isDebug()) {
|
|
153
|
+
Log.d(TAG, "DebugPool flexView reset child:"+view);
|
|
154
|
+
}
|
|
155
|
+
((HippyRecycler) view).onResetBeforeCache();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
final Iterator<FastAdapter.Holder> it = cacheHolders.iterator();
|
|
159
|
+
int i = 0;
|
|
160
|
+
while (it.hasNext()){
|
|
161
|
+
final FastAdapter.Holder holder = it.next();
|
|
162
|
+
if(holder.singleton){
|
|
163
|
+
//zhaopeng 20220714 这里不将singleton的view缓存在flexView里,以防止后来重用时被误删
|
|
164
|
+
it.remove();
|
|
165
|
+
mAdapter.dataList.removeAt(i);
|
|
166
|
+
if(holder.itemView.getParent() instanceof ViewGroup){
|
|
167
|
+
((ViewGroup) holder.itemView.getParent()).removeView(holder.itemView);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
i++;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
@Override
|
|
176
|
+
public void resetProps() {
|
|
177
|
+
super.resetProps();
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
@Override
|
|
181
|
+
public void clear() {
|
|
182
|
+
super.clear();
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
@Override
|
|
186
|
+
public View getView() {
|
|
187
|
+
return this;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
@Override
|
|
191
|
+
public void notifyRecycled() {
|
|
192
|
+
if(LogUtils.isDebug()) {
|
|
193
|
+
Log.d(TAG, "notifyRecycled this:" + hashCode() + ",childrenCount:" + getChildCount());
|
|
194
|
+
}
|
|
195
|
+
// mAdapter.recycleAll();
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
@Override
|
|
199
|
+
public void updateItem(int pos, Object data) {
|
|
200
|
+
if (mAdapter != null) {
|
|
201
|
+
mAdapter.replaceItemData(pos,data);
|
|
202
|
+
RecyclerView.LayoutParams lpBefore = findCacheHolderFromIndex(pos) != null ? mAdapter.getItemLayoutParams(findCacheHolderFromIndex(pos)) : null;
|
|
203
|
+
updateHolder(pos);
|
|
204
|
+
RecyclerView.LayoutParams lpAfter = findCacheHolderFromIndex(pos) != null ? mAdapter.getItemLayoutParams(findCacheHolderFromIndex(pos)) : null;
|
|
205
|
+
boolean changed = lpBefore == null && lpAfter != null;
|
|
206
|
+
if (!changed) {
|
|
207
|
+
if (lpBefore != null && lpAfter != null) {
|
|
208
|
+
changed = lpBefore.width != lpAfter.width || lpBefore.height != lpAfter.height;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
if (changed) {
|
|
212
|
+
computeSize(mAdapter.dataList);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
@Override
|
|
218
|
+
public void replaceItemData(int pos, Object data) {
|
|
219
|
+
if (mAdapter != null) {
|
|
220
|
+
mAdapter.replaceItemData(pos,data);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
@Override
|
|
227
|
+
public void updateItem(int pos, Object data, boolean traverse) {
|
|
228
|
+
this.updateItem(pos,data);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
@Override
|
|
232
|
+
public void updateItemProps(String name,int position, Object data, boolean updateView) {
|
|
233
|
+
if (mAdapter != null) {
|
|
234
|
+
final RecyclerView.ViewHolder vh = findViewHolderForAdapterPosition(position);
|
|
235
|
+
mAdapter.updateItemProps(name, position, (HippyMap) data, updateView, vh);
|
|
236
|
+
if (vh == null) {
|
|
237
|
+
Log.e(TAG, "updateItemProps error,没有找到对应的Holder,当前View可能没有在展示");
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
@Override
|
|
243
|
+
public void notifyDetachFromParent() {
|
|
244
|
+
if(cacheHolders != null && mAdapter != null) {
|
|
245
|
+
for (int i = 0; i < cacheHolders.size(); i ++){
|
|
246
|
+
mAdapter.onViewDetachedFromWindow(cacheHolders.get(i));
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
@Override
|
|
252
|
+
public void notifyAttachToParent() {
|
|
253
|
+
if(cacheHolders != null && mAdapter != null) {
|
|
254
|
+
// Log.i(AutoFocusManager.TAG,"FastList notifyAttachToParent cacheHolders size:"+cacheHolders.size());
|
|
255
|
+
for (int i = 0; i < cacheHolders.size(); i ++){
|
|
256
|
+
mAdapter.onViewAttachedToWindow(cacheHolders.get(i));
|
|
257
|
+
}
|
|
258
|
+
}else{
|
|
259
|
+
// Log.i(AutoFocusManager.TAG,"FastList notifyAttachToParent cacheHolders size:"+0);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
@Override
|
|
264
|
+
protected void onAttachedToWindow() {
|
|
265
|
+
super.onAttachedToWindow();
|
|
266
|
+
isAttached = true;
|
|
267
|
+
updateCachePoolName();
|
|
268
|
+
updateCachePoolMap();
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
private HippyMap recycledViewPoolMap;
|
|
272
|
+
private String poolName = hashCode()+"";
|
|
273
|
+
|
|
274
|
+
public HippyMap getRecycledViewPoolMap() {
|
|
275
|
+
if (recycledViewPoolMap == null) {
|
|
276
|
+
recycledViewPoolMap = new HippyMap();
|
|
277
|
+
}
|
|
278
|
+
return recycledViewPoolMap;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// public void setCachePoolName(String name) {
|
|
282
|
+
// this.poolName = name;
|
|
283
|
+
// if(isAttached()){
|
|
284
|
+
// updateCachePoolName();
|
|
285
|
+
// }
|
|
286
|
+
// }
|
|
287
|
+
|
|
288
|
+
private void updateCachePoolName(){
|
|
289
|
+
mAdapter.setShareViewPoolType(poolName);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
private void updateCachePoolMap(){
|
|
293
|
+
final HippyMap map = recycledViewPoolMap;
|
|
294
|
+
if (map == null) {
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
if (mAdapter != null) {
|
|
298
|
+
if (map.containsKey("name")) {
|
|
299
|
+
mAdapter.setShareViewPoolType(map.getString("name"));
|
|
300
|
+
final RecyclerView.RecycledViewPool pool = mAdapter.getCacheWorker(getContext(),this);
|
|
301
|
+
if (LogUtils.isDebug()) {
|
|
302
|
+
Log.i("DebugPool", "flex setCachePoolMap name=" + map.getString("name") + ",this:" + this);
|
|
303
|
+
Log.i("DebugPool", "DebugPool setupPool in flex instance:" + Utils.hashCode(pool)+",context:"+getContext());
|
|
304
|
+
}
|
|
305
|
+
HippyMap size = map.getMap("size");
|
|
306
|
+
for (String typeS : size.keySet()) {
|
|
307
|
+
final int type = Integer.parseInt(typeS);
|
|
308
|
+
final int count = size.getInt(typeS);
|
|
309
|
+
if (LogUtils.isDebug()) {
|
|
310
|
+
Log.i("DebugPool", "setCachePoolMap in flex type:" + type + ",count:" + count + ",this:" + this);
|
|
311
|
+
}
|
|
312
|
+
if (mAdapter.findOldCacheWorker() != null) {
|
|
313
|
+
mAdapter.findOldCacheWorker().setMaxCacheSize(type, count);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}else{
|
|
317
|
+
//Log.e("DebugPool", "flex updateCachePoolMap on no name:"+map);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
@Override
|
|
323
|
+
protected void onDetachedFromWindow() {
|
|
324
|
+
super.onDetachedFromWindow();
|
|
325
|
+
isAttached = false;
|
|
326
|
+
if(LogUtils.isDebug()) {
|
|
327
|
+
Log.e(TAG, "onDetachedFromWindow this:" + hashCode() + ",childrenCount:" + (cacheHolders == null ? 0 : cacheHolders.size()));
|
|
328
|
+
}
|
|
329
|
+
if (mAdapter != null) {
|
|
330
|
+
mAdapter.clearDetachCaches();
|
|
331
|
+
}
|
|
332
|
+
// recycleChildren();
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
HippyEngineContext getEngineContext(){
|
|
338
|
+
return ((HippyInstanceContext) getContext()).getEngineContext();
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
public void setPendingData(Object data, RenderNode templateNode){
|
|
342
|
+
setPendingData(data,templateNode,this.useDiff);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
public void setPendingData(Object data, RenderNode templateNode,boolean useDiff) {
|
|
346
|
+
boolean isPauseOnInVisible = mAdapter.getRootListView() != null && mAdapter.getRootListView().isPostTaskPaused();
|
|
347
|
+
if(LogUtils.isDebug()) {
|
|
348
|
+
Log.v(TAG, "setPendingData data:" + data +",isPauseOnInVisible:"+isPauseOnInVisible + ",templateNode:" + templateNode + ",data instanceof HippyArray :" + (data instanceof HippyArray) );
|
|
349
|
+
}
|
|
350
|
+
assert (templateNode instanceof FastAdapter.ListNode);
|
|
351
|
+
assert (data instanceof HippyArray);
|
|
352
|
+
mAdapter.setContext(getEngineContext(),getContext());
|
|
353
|
+
mAdapter.setListNode((FastAdapter.ListNode) templateNode);
|
|
354
|
+
//共享数据
|
|
355
|
+
mAdapter.onBeforeChangeAdapter();
|
|
356
|
+
|
|
357
|
+
final HippyArray newArray = (HippyArray) data;
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
if (!useDiff || (isPauseOnInVisible || mAdapter.isEnablePlaceholder()) ) {
|
|
361
|
+
mAdapter.setData(newArray);
|
|
362
|
+
mAdapter.onAttachedToView(this);
|
|
363
|
+
computeSize(newArray);
|
|
364
|
+
onAdapterChange();
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
final HippyArray oldArray = mAdapter.dataList;
|
|
369
|
+
if (LogUtils.isDebug()) {
|
|
370
|
+
Log.i(TAG, "handleDataDiff 刷新数据 oldArray.size--" + (oldArray == null ? "0" : oldArray.size())
|
|
371
|
+
+ " newArray.size--" + (newArray == null ? "0" : newArray.size())
|
|
372
|
+
+ " hashCode--" + FastFlexView.this.hashCode());
|
|
373
|
+
}
|
|
374
|
+
FastListDataBindingHelper.handleDataDiffCallBack3(oldArray, newArray, keyName,
|
|
375
|
+
new FastListDataBindingHelper.OnDataDiffListener3() {
|
|
376
|
+
|
|
377
|
+
@Override
|
|
378
|
+
public void onRangeInsert(int position, int count) {
|
|
379
|
+
if (LogUtils.isDebug()) {
|
|
380
|
+
Log.i(TAG, "handleDataDiff 刷新数据 onRangeInsert--" + " position--" + position + " count--" + count);
|
|
381
|
+
}
|
|
382
|
+
for(int i = position;i < position+ count; i ++){
|
|
383
|
+
FastAdapter.Holder vh = obtainHolder(i);
|
|
384
|
+
addHolderView(i,vh);
|
|
385
|
+
mAdapter.onBindViewHolder(vh,i);
|
|
386
|
+
cacheHolders.add(i,vh);
|
|
387
|
+
if(isAttached){
|
|
388
|
+
mAdapter.onViewAttachedToWindow(vh);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
//0,1,2 1-2
|
|
393
|
+
@Override
|
|
394
|
+
public void onRangeDelete(int position, int count) {
|
|
395
|
+
if (LogUtils.isDebug()) {
|
|
396
|
+
Log.i(TAG, "handleDataDiff 刷新数据 onRangeDelete--" + " position--" + position + " count--" + count);
|
|
397
|
+
}
|
|
398
|
+
for(int i = position + count -1; i > position - 1; i --){
|
|
399
|
+
removeHolder(i);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
@Override
|
|
404
|
+
public void onUpdateViewData() {
|
|
405
|
+
mAdapter.setData(newArray);
|
|
406
|
+
if (LogUtils.isDebug()) {
|
|
407
|
+
Log.i(TAG, "handleDataDiff 刷新数据 onUpdateViewData");
|
|
408
|
+
}
|
|
409
|
+
mAdapter.onAttachedToView(FastFlexView.this);
|
|
410
|
+
computeSize(newArray);
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
|
|
414
|
+
@Override
|
|
415
|
+
public void onMove(int position, int nextPosition) {
|
|
416
|
+
//mAdapter.notifyItemMoved(position, nextPosition);
|
|
417
|
+
if (LogUtils.isDebug()) {
|
|
418
|
+
Log.i(TAG, "handleDataDiff 刷新数据 onMove--" + " position--" + position + " nextPosition--" + nextPosition);
|
|
419
|
+
}
|
|
420
|
+
onAdapterChange();
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
@Override
|
|
424
|
+
public void onRangeUpdate(int start, int count) {
|
|
425
|
+
if (LogUtils.isDebug()) {
|
|
426
|
+
Log.i(TAG, "handleDataDiff 刷新数据 onRangeUpdate--" + " start--" + start + " count--" + count);
|
|
427
|
+
}
|
|
428
|
+
for(int i = start; i < start + count; i ++){
|
|
429
|
+
updateHolder(i);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
@Override
|
|
434
|
+
public void onAllChange() {
|
|
435
|
+
if (LogUtils.isDebug()) {
|
|
436
|
+
Log.i(TAG, "handleDataDiff 刷新数据 onAllChange");
|
|
437
|
+
}
|
|
438
|
+
onAdapterChange();
|
|
439
|
+
}
|
|
440
|
+
},
|
|
441
|
+
item -> (HippyMap) item.raw, FastAdapter.ItemEntity.class);
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
private void computeSize(HippyArray list){
|
|
445
|
+
try {
|
|
446
|
+
|
|
447
|
+
int maxWidth = 0;
|
|
448
|
+
int maxHeight = 0;
|
|
449
|
+
for (int i = 0; i < list.size(); i++) {
|
|
450
|
+
|
|
451
|
+
|
|
452
|
+
final HippyMap item = (HippyMap) list.get(i);
|
|
453
|
+
// Log.d(TAG, "computeSize item:" + item);
|
|
454
|
+
final HippyArray layout = item.getArray("layout");
|
|
455
|
+
if(layout == null || layout.size() < 1){
|
|
456
|
+
//throw new IllegalArgumentException("FastFlexView计算尺寸错误,请确保item数据里有layout对象");
|
|
457
|
+
if(LogUtils.isDebug()) {
|
|
458
|
+
Log.e(TAG, "FastFlexView计算尺寸时, layout数据 未指定,可能会造成显示错误");
|
|
459
|
+
}
|
|
460
|
+
continue;
|
|
461
|
+
}
|
|
462
|
+
// Log.d(TAG, "computeSize layout:" + layout);
|
|
463
|
+
final int x = Utils.toPX(layout.getInt(0));
|
|
464
|
+
final int y = Utils.toPX(layout.getInt(1));
|
|
465
|
+
final int w = Utils.toPX(layout.getInt(2));
|
|
466
|
+
final int h = Utils.toPX(layout.getInt(3));
|
|
467
|
+
if (x + w > maxWidth) {
|
|
468
|
+
maxWidth = x + w;
|
|
469
|
+
}
|
|
470
|
+
if (y + h > maxHeight) {
|
|
471
|
+
maxHeight = y + h;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
if (padding != null) {
|
|
476
|
+
//0 1 2 3 : l t r b
|
|
477
|
+
maxWidth += (padding[0] + padding[2]);
|
|
478
|
+
maxHeight += (padding[1] + padding[3]);
|
|
479
|
+
}
|
|
480
|
+
if (maxWidth > 0) {
|
|
481
|
+
this.preferWidth = maxWidth;
|
|
482
|
+
}
|
|
483
|
+
if (maxHeight > 0) {
|
|
484
|
+
this.preferHeight = maxHeight;
|
|
485
|
+
}
|
|
486
|
+
if(LogUtils.isDebug()) {
|
|
487
|
+
Log.e(TAG, "computeSize preferWidth:" + preferWidth + ",preferHeight:" + preferHeight);
|
|
488
|
+
}
|
|
489
|
+
}catch (Throwable t){
|
|
490
|
+
t.printStackTrace();
|
|
491
|
+
if(LogUtils.isDebug()) {
|
|
492
|
+
Log.e(TAG, "computeSize preferWidth:" + preferWidth + ",preferHeight:" + preferHeight);
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
public int getPreferWidth(){
|
|
499
|
+
return this.preferWidth;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
public int getPreferHeight(){
|
|
503
|
+
return this.preferHeight;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
void recycleChildren(){
|
|
507
|
+
if(cacheHolders != null && mAdapter != null) {
|
|
508
|
+
for (int i = 0; i < cacheHolders.size(); i ++){
|
|
509
|
+
recycleItem(cacheHolders.get(i),i);
|
|
510
|
+
}
|
|
511
|
+
cacheHolders.clear();
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
FastAdapter.Holder findCacheHolderFromIndex(int i){
|
|
516
|
+
if(cacheHolders == null || cacheHolders.size() <= i || i < 0){
|
|
517
|
+
return null;
|
|
518
|
+
}
|
|
519
|
+
final FastAdapter.Holder result = cacheHolders.get(i);
|
|
520
|
+
|
|
521
|
+
// if(result.itemView.getParent() == this){
|
|
522
|
+
// return result;
|
|
523
|
+
// }
|
|
524
|
+
return result;
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
void recycleItem(FastAdapter.Holder holder,int index){
|
|
528
|
+
if(LogUtils.isDebug()) {
|
|
529
|
+
Log.i(TAG, "DebugPool FlexView recycleItem holder type:" + holder.type + ",index:" + index);
|
|
530
|
+
}
|
|
531
|
+
// if(getChildCount() > index && index > -1){
|
|
532
|
+
// removeViewAt(index);
|
|
533
|
+
// }else {
|
|
534
|
+
final View v = holder.itemView;
|
|
535
|
+
if (v.getParent() instanceof ViewGroup) {
|
|
536
|
+
((ViewGroup) v.getParent()).removeView(v);
|
|
537
|
+
}
|
|
538
|
+
// }
|
|
539
|
+
if(mAdapter != null ){
|
|
540
|
+
mAdapter.onViewDetachedFromWindow(holder);
|
|
541
|
+
// if(holder.itemView instanceof HippyRecycler){
|
|
542
|
+
// ((HippyRecycler) holder.itemView).onResetBeforeCache();
|
|
543
|
+
// }
|
|
544
|
+
mAdapter.onViewRecycled(holder);
|
|
545
|
+
mAdapter.recycleItem(holder);
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
ArrayList<FastAdapter.Holder> tempHolders;
|
|
550
|
+
ArrayList<Integer> markToDelete;
|
|
551
|
+
|
|
552
|
+
void updateHolder(int pos){
|
|
553
|
+
// FastAdapter.Holder vh = findCacheHolderFromIndex(pos);
|
|
554
|
+
// if (vh != null) {
|
|
555
|
+
//// mAdapter.bindViewHolder(vh,pos);
|
|
556
|
+
//
|
|
557
|
+
// mAdapter.onBindViewHolder(vh,pos);
|
|
558
|
+
// }
|
|
559
|
+
|
|
560
|
+
final int type = mAdapter.getItemViewType(pos);
|
|
561
|
+
// if(cacheHolders == null){
|
|
562
|
+
// this.cacheHolders = new ArrayList<>();
|
|
563
|
+
// }
|
|
564
|
+
FastAdapter.Holder vh = null;
|
|
565
|
+
//先从当前view里找
|
|
566
|
+
FastAdapter.Holder cvh = findCacheHolderFromIndex(pos);
|
|
567
|
+
if(cvh != null){
|
|
568
|
+
//类型相同,只需要重新onBind
|
|
569
|
+
if(cvh.type == type) {
|
|
570
|
+
vh = cvh;
|
|
571
|
+
// if(LogUtils.isDebug()) {
|
|
572
|
+
// Log.e(TAG, "DebugPool findCacheHolderFromIndex type Matched ,vh" + vh.hashCode() + ",type:" + vh.type);
|
|
573
|
+
// }
|
|
574
|
+
mAdapter.onBindViewHolder(vh, pos);
|
|
575
|
+
// cacheHolders.add(pos, vh);
|
|
576
|
+
}else{
|
|
577
|
+
// //类型不同,放入缓存池
|
|
578
|
+
recycleItem(cvh, pos);
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
if(vh == null) {//对应位置没有缓存
|
|
582
|
+
//从adapter缓存里找
|
|
583
|
+
vh = obtainHolder(pos);
|
|
584
|
+
addHolderView(pos, vh);
|
|
585
|
+
mAdapter.onBindViewHolder(vh, pos);
|
|
586
|
+
cacheHolders.set(pos, vh);
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
@Override
|
|
591
|
+
public void setSharedItemStore(String name) {
|
|
592
|
+
if(mAdapter != null){
|
|
593
|
+
mAdapter.setShareItemStoreName(name);
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
public FastAdapter getAdapter() {
|
|
598
|
+
return mAdapter;
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
void addHolderView(int position, FastAdapter.Holder vh){
|
|
602
|
+
final RenderNode rn = vh.tag.template;
|
|
603
|
+
if(LogUtils.isDebug()) {
|
|
604
|
+
Log.v(TAG, "onAdapterChange add vh templateNode:" + rn);
|
|
605
|
+
}
|
|
606
|
+
// RenderUtil.reLayoutView(vh.itemView,rn.getX(),rn.getY(),rn.getWidth(), rn.getHeight());
|
|
607
|
+
final ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(rn.getWidth(),rn.getHeight());
|
|
608
|
+
if(vh.itemView.getParent() == null){
|
|
609
|
+
addView(vh.itemView,position,lp);
|
|
610
|
+
}else{
|
|
611
|
+
throw new IllegalStateException("此view Parent 不为空,请先删除 view:"+vh.itemView);
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
void removeHolder(int pos){
|
|
616
|
+
recycleItem(cacheHolders.get(pos),pos);
|
|
617
|
+
cacheHolders.remove(pos);
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
FastAdapter.Holder obtainHolder(int position){
|
|
621
|
+
final int type = mAdapter.getItemViewType(position);
|
|
622
|
+
FastAdapter.Holder vh = mAdapter.findOldCacheView(type);
|
|
623
|
+
if(vh == null) {
|
|
624
|
+
vh = mAdapter.createViewHolder(this, type);
|
|
625
|
+
if(LogUtils.isDebug()) {
|
|
626
|
+
Log.e(TAG, "DebugPool flex createHolder new vh" + vh.hashCode() + ",type:" + vh.type+",this:"+ExtendUtil.debugView(this)+",map:"+ recycledViewPoolMap);
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
return vh;
|
|
630
|
+
}
|
|
631
|
+
FastAdapter.Holder findHolderByPosition(int pos){
|
|
632
|
+
if (cacheHolders != null && cacheHolders.size() > pos && pos > -1) {
|
|
633
|
+
return cacheHolders.get(pos);
|
|
634
|
+
}
|
|
635
|
+
return null;
|
|
636
|
+
}
|
|
637
|
+
void onAdapterChange(){
|
|
638
|
+
this.hasReset = false;
|
|
639
|
+
//Log.d(TAG,"onAdapterChange itemCount:"+mAdapter.getItemCount());
|
|
640
|
+
if(mAdapter != null){
|
|
641
|
+
if(tempHolders != null){
|
|
642
|
+
tempHolders.clear();
|
|
643
|
+
}else{
|
|
644
|
+
tempHolders = new ArrayList<>();
|
|
645
|
+
}
|
|
646
|
+
//removeAllViews();
|
|
647
|
+
for(int i = 0; i < mAdapter.getItemCount(); i++){
|
|
648
|
+
try {
|
|
649
|
+
final int type = mAdapter.getItemViewType(i);
|
|
650
|
+
|
|
651
|
+
FastAdapter.Holder vh = null;
|
|
652
|
+
//先从当前view里找
|
|
653
|
+
FastAdapter.Holder cvh = findCacheHolderFromIndex(i);
|
|
654
|
+
|
|
655
|
+
if (cvh != null) {
|
|
656
|
+
//类型相同,只需要重新onBind
|
|
657
|
+
if (cvh.type == type) {
|
|
658
|
+
vh = cvh;
|
|
659
|
+
if (LogUtils.isDebug()) {
|
|
660
|
+
Log.i(TAG, "DebugPool findCacheHolderFromIndex type Matched ,vh" + vh.hashCode() + ",type:" + vh.type);
|
|
661
|
+
}
|
|
662
|
+
mAdapter.onBindViewHolder(vh, i);
|
|
663
|
+
if(isAttached){
|
|
664
|
+
mAdapter.onViewAttachedToWindow(vh);
|
|
665
|
+
}
|
|
666
|
+
tempHolders.add(i, vh);
|
|
667
|
+
} else {
|
|
668
|
+
//类型不同,放入缓存池
|
|
669
|
+
recycleItem(cvh, i);
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
if (vh == null) {//对应位置没有缓存
|
|
673
|
+
//从adapter缓存里找
|
|
674
|
+
vh = obtainHolder(i);
|
|
675
|
+
addHolderView(i, vh);
|
|
676
|
+
mAdapter.onBindViewHolder(vh, i);
|
|
677
|
+
if(isAttached){
|
|
678
|
+
mAdapter.onViewAttachedToWindow(vh);
|
|
679
|
+
}
|
|
680
|
+
// mAdapter.onViewAttachedToWindow(vh);
|
|
681
|
+
tempHolders.add(i, vh);
|
|
682
|
+
}
|
|
683
|
+
}catch (Throwable t){
|
|
684
|
+
t.printStackTrace();
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
if(tempHolders != null){
|
|
689
|
+
//删除不需要的view
|
|
690
|
+
if(cacheHolders == null){
|
|
691
|
+
this.cacheHolders = new ArrayList<>();
|
|
692
|
+
}
|
|
693
|
+
if(tempHolders.size() < cacheHolders.size()){
|
|
694
|
+
for(int i = tempHolders.size(); i < cacheHolders.size(); i ++){
|
|
695
|
+
recycleItem(cacheHolders.get(i),i);
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
this.cacheHolders.clear();
|
|
699
|
+
this.cacheHolders.addAll(tempHolders);
|
|
700
|
+
tempHolders.clear();
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
@Override
|
|
706
|
+
public void setCachePoolMap(HippyMap map) {
|
|
707
|
+
this.recycledViewPoolMap = map;
|
|
708
|
+
// Log.e("DebugPool","setCachePoolMap map :"+map+",this:"+ ExtendUtil.debugView(this));
|
|
709
|
+
updateCachePoolMap();
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
public void dispatchItemFunction(HippyArray var, @Nullable Promise promise) {
|
|
713
|
+
final int itemPos = var.getInt(0);
|
|
714
|
+
final String targetName = var.getString(1);
|
|
715
|
+
final String functionTargetName = var.getString(2);
|
|
716
|
+
final HippyArray array = var.getArray(3);
|
|
717
|
+
|
|
718
|
+
final RecyclerView.ViewHolder holder = findViewHolderForAdapterPosition(itemPos);
|
|
719
|
+
if (holder instanceof FastAdapter.Holder) {
|
|
720
|
+
FastAdapter.Holder vh = (FastAdapter.Holder) holder;
|
|
721
|
+
final FastAdapter.ElementNode targetNode = Utils.findElementNodeByName(targetName, vh.tag.getRootNode());
|
|
722
|
+
final View target = targetNode == null ? null : targetNode.boundView;
|
|
723
|
+
if (target != null && functionTargetName != null && !"dispatchFunctionByViewName".equals(functionTargetName)) {
|
|
724
|
+
if (LogUtils.isDebug()) {
|
|
725
|
+
Log.i(TAG, "dispatchItemFunction dispatchItemFunction work, target ==:" + target + ",targetName:" + targetName + ",functionTargetName:" + functionTargetName);
|
|
726
|
+
}
|
|
727
|
+
Utils.dispatchFunction(mAdapter.getControllerManager(), targetNode, functionTargetName, array, promise);
|
|
728
|
+
} else {
|
|
729
|
+
if (LogUtils.isDebug()) {
|
|
730
|
+
Log.e(TAG, "dispatchItemFunction dispatchFunctionByViewName error target ==:" + target + ",targetName:" + targetName + ",functionTargetName:" + functionTargetName);
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
} else {
|
|
734
|
+
Log.e(TAG, "dispatchItemFunction dispatchItemFunction error , found holder null , pos:" + itemPos);
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
private RecyclerView.ViewHolder findViewHolderForAdapterPosition(int itemPos) {
|
|
740
|
+
return findCacheHolderFromIndex(itemPos);
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
@Override
|
|
744
|
+
public View findViewByPosition(int position) {
|
|
745
|
+
if(position > -1 && position < getChildCount()){
|
|
746
|
+
return getChildAt(position);
|
|
747
|
+
}
|
|
748
|
+
return null;
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
@Override
|
|
752
|
+
public void notifyPauseTask() {
|
|
753
|
+
if(cacheHolders != null && mAdapter != null) {
|
|
754
|
+
for (int i = 0; i < cacheHolders.size(); i ++){
|
|
755
|
+
final View view = cacheHolders.get(i).itemView;
|
|
756
|
+
if(view instanceof FastAdapter.ScrollTaskHandler){
|
|
757
|
+
((FastAdapter.ScrollTaskHandler) view).notifyPauseTask();
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
@Override
|
|
764
|
+
public void notifyBringToFront(boolean front) {
|
|
765
|
+
if(cacheHolders != null && mAdapter != null) {
|
|
766
|
+
for (int i = 0; i < cacheHolders.size(); i ++){
|
|
767
|
+
final View view = cacheHolders.get(i).itemView;
|
|
768
|
+
if(view instanceof FastAdapter.ScrollTaskHandler){
|
|
769
|
+
((FastAdapter.ScrollTaskHandler) view).notifyBringToFront(front);
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
@Override
|
|
776
|
+
public void notifyResumeTask() {
|
|
777
|
+
if(cacheHolders != null && mAdapter != null) {
|
|
778
|
+
for (int i = 0; i < cacheHolders.size(); i ++){
|
|
779
|
+
final View view = cacheHolders.get(i).itemView;
|
|
780
|
+
if(view instanceof FastAdapter.ScrollTaskHandler){
|
|
781
|
+
((FastAdapter.ScrollTaskHandler) view).notifyResumeTask();
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
void init(){
|
|
788
|
+
mAdapter = new FastAdapter();
|
|
789
|
+
mAdapter.setEnablePlaceholder(enablePlaceholder);
|
|
790
|
+
mAdapter.eventDeliverer = eventDeliverer;
|
|
791
|
+
// mAdapter.setShareViewPoolType(hashCode()+"");
|
|
792
|
+
mAdapter.setBoundFLexView(this);
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
|
|
796
|
+
@Override
|
|
797
|
+
public void clearPostTask(int type) {
|
|
798
|
+
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
@Override
|
|
802
|
+
public void setRootList(FastListView rootList,FastAdapter parentAdapter) {
|
|
803
|
+
if(mAdapter != null){
|
|
804
|
+
mAdapter.setRootList(rootList,parentAdapter);
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
|
|
809
|
+
@Override
|
|
810
|
+
public int findPositionByChild(View child) {
|
|
811
|
+
return -1;
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
private HippyViewGroup pageRootView;
|
|
815
|
+
@Override
|
|
816
|
+
public HippyViewGroup findPageRootView() {
|
|
817
|
+
if (pageRootView != null) {
|
|
818
|
+
return pageRootView;
|
|
819
|
+
}
|
|
820
|
+
View v = HippyViewGroup.findRootViewFromParent(this);
|
|
821
|
+
if(v instanceof HippyViewGroup){
|
|
822
|
+
pageRootView = (HippyViewGroup) v;
|
|
823
|
+
}
|
|
824
|
+
return pageRootView;
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
@Override
|
|
828
|
+
public void searchUpdateItemDataByItemID(String id, Object data, boolean traverse) {
|
|
829
|
+
if (mAdapter != null) {
|
|
830
|
+
FastAdapterUtil.updateItemData4FastAdapterTraverse(id,data,mAdapter.dataList,traverse,"FlexView:"+Integer.toHexString(hashCode()));
|
|
831
|
+
}
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
@Override
|
|
835
|
+
public void searchUpdateItemViewByItemID(String id, Object data, boolean traverse) {
|
|
836
|
+
FastAdapterUtil.updateItemViewByItemID(this.getView(),id,data,traverse);
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
@Override
|
|
840
|
+
public int findItemPositionBySID(String id) {
|
|
841
|
+
return mAdapter == null ? -1 : mAdapter.findItemPositionBySID(id);
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
/**
|
|
845
|
+
* 根据指定的itemID,动态的更新一个元素的属性,
|
|
846
|
+
*/
|
|
847
|
+
@Override
|
|
848
|
+
public void searchUpdateItemPropsBySID(String name, String itemID, String prop, Object newValue, boolean updateView){
|
|
849
|
+
FastAdapterUtil.updateItemPropsByItemID(this.getView(),name,itemID,prop,newValue,updateView);
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
@Override
|
|
853
|
+
public void updateItemSpecificProp(String name, int position, String key, Object value,boolean updateView) {
|
|
854
|
+
if (mAdapter != null) {
|
|
855
|
+
final RecyclerView.ViewHolder vh = findViewHolderForAdapterPosition(position);
|
|
856
|
+
mAdapter.updateItemSpecificPropByTargetName(name, position, key, value, updateView,vh);
|
|
857
|
+
if (vh == null) {
|
|
858
|
+
Log.e(TAG, "updateItemSpecificProp error,没有找到对应的Holder,当前View可能没有在展示");
|
|
859
|
+
}
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
@Override
|
|
864
|
+
public View findFirstFocusByDirection(int direction) {
|
|
865
|
+
if (direction == View.FOCUS_DOWN) {
|
|
866
|
+
if (getChildCount() > 0) {
|
|
867
|
+
return getChildAt(0);
|
|
868
|
+
}
|
|
869
|
+
}
|
|
870
|
+
return null;
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
}
|