Skip to content

Commit 707cf1d

Browse files
committed
fix(ohos): fix pull head view offset when init 0 size
1 parent 1b13cca commit 707cf1d

File tree

4 files changed

+35
-1
lines changed

4 files changed

+35
-1
lines changed

framework/ohos/src/main/cpp/impl/renderer/native/include/renderer/components/list_view.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ enum class ScrollAction : int32_t {
4343
ReleaseFooter
4444
};
4545

46-
class ListView : public BaseView, public ListNodeDelegate, public ListItemNodeDelegate, public RefreshNodeDelegate {
46+
class ListView : public BaseView, public ListNodeDelegate, public ListItemNodeDelegate, public RefreshNodeDelegate, public PullHeaderViewDelegate {
4747
public:
4848
ListView(std::shared_ptr<NativeRenderContext> &ctx);
4949
~ListView();
@@ -85,6 +85,9 @@ class ListView : public BaseView, public ListNodeDelegate, public ListItemNodeDe
8585
void OnStateChange(int32_t state) override;
8686
void OnOffsetChange(float_t offset) override;
8787

88+
// PullHeaderViewDelegate
89+
void OnPullHeaderViewSizeUpdated(const HRSize &size) override;
90+
8891
// pull head
8992
void OnHeadRefreshFinish(int32_t delay);
9093
void OnHeadRefresh();

framework/ohos/src/main/cpp/impl/renderer/native/include/renderer/components/pull_header_view.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ namespace hippy {
3030
inline namespace render {
3131
inline namespace native {
3232

33+
class PullHeaderViewDelegate {
34+
public:
35+
virtual ~PullHeaderViewDelegate() = default;
36+
virtual void OnPullHeaderViewSizeUpdated(const HRSize &size) {}
37+
};
38+
3339
class PullHeaderView : public ListItemView {
3440
public:
3541
PullHeaderView(std::shared_ptr<NativeRenderContext> &ctx);
@@ -49,12 +55,16 @@ class PullHeaderView : public ListItemView {
4955
void CallImpl(const std::string &method, const std::vector<HippyValue> params,
5056
std::function<void(const HippyValue &result)> callback) override;
5157
void OnSetPropsEndImpl() override;
58+
59+
void SetPullHeaderViewDelegate(PullHeaderViewDelegate *delegate) { viewDelegate_ = delegate; }
5260

5361
private:
5462
void OnHeadRefreshFinish(int32_t delay = 0);
5563
void OnHeaderRefresh();
5664

5765
std::shared_ptr<StackNode> headerItemNode_;
66+
67+
PullHeaderViewDelegate *viewDelegate_ = nullptr;
5868
};
5969

6070
} // namespace native

framework/ohos/src/main/cpp/impl/renderer/native/src/components/list_view.cc

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ ListView::~ListView() {
5555
stackNode_->RemoveAllChildren();
5656
}
5757
if (headerView_) {
58+
headerView_->SetPullHeaderViewDelegate(nullptr);
5859
headerView_->DestroyArkUINode();
5960
}
6061
}
@@ -393,6 +394,21 @@ void ListView::OnOffsetChange(float_t offset) {
393394
}
394395
}
395396

397+
void ListView::OnPullHeaderViewSizeUpdated(const HRSize &size) {
398+
if (size.height > 0 && size.width > 0) {
399+
pullHeaderWH_ = isVertical_ ? size.height : size.width;
400+
if (isVertical_) {
401+
headerView_->SetPosition({0, - pullHeaderWH_});
402+
} else {
403+
headerView_->SetPosition({- pullHeaderWH_, 0});
404+
}
405+
if (refreshNode_) {
406+
auto refreshOffset = pullHeaderWH_;
407+
refreshNode_->SetRefreshOffset(refreshOffset);
408+
}
409+
}
410+
}
411+
396412
void ListView::OnHeadRefreshFinish(int32_t delay) {
397413
FOOTSTONE_DLOG(INFO) << __FUNCTION__ << " delay = " << delay;
398414
refreshNode_->SetRefreshRefreshing(false);
@@ -409,6 +425,7 @@ void ListView::HandleOnChildrenUpdated() {
409425
auto newHeaderView = std::static_pointer_cast<PullHeaderView>(children_[0]);
410426
if (newHeaderView != headerView_) { // 不宜重复设置headerView的position,否则会闪
411427
headerView_ = newHeaderView;
428+
headerView_->SetPullHeaderViewDelegate(this);
412429
hasPullHeader_ = true;
413430
pullHeaderWH_ = isVertical_ ? headerView_->GetHeight() : headerView_->GetWidth();
414431

framework/ohos/src/main/cpp/impl/renderer/native/src/components/pull_header_view.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,10 @@ void PullHeaderView::UpdateRenderViewFrameImpl(const HRRect &frame, const HRPadd
8484
headerItemNode_->SetSize(HRSize(frame.width, frame.height));
8585
width_ = frame.width;
8686
height_ = frame.height;
87+
88+
if (viewDelegate_) {
89+
viewDelegate_->OnPullHeaderViewSizeUpdated(HRSize(width_, height_));
90+
}
8791
}
8892

8993
bool PullHeaderView::SetPropImpl(const std::string &propKey, const HippyValue &propValue) {

0 commit comments

Comments
 (0)