YvesCheung / PageStatusTransformer

A low invasive state management on Android
Apache License 2.0
13 stars 1 forks source link

嵌套使用列表无法显示完全,或者导致闪退 #1

Closed appdev closed 3 years ago

appdev commented 3 years ago

首先感谢开发这么好用的库。虽然类似的不少,但真的是我用的最舒服的一个了。

我的布局大体是这样的 CoordinatorLayout 配合 RecyclerView 使用,为了实现 RecyclerView 部分的不同状态,使用了下面代码: PageStatusTransformer.newInstance(RecyclerView)

遇到的问题是:

布局:

    NestedScrollView
        RecyclerView

直接使用 PageStatusTransformer.newInstance(RecyclerView) 报错: ScrollView can host only one direct child

修改后:

    NestedScrollView
        FrameLayout
            RecyclerView

使用 PageStatusTransformer.newInstance(RecyclerView) 虽然不报错了。但是遇到了跟上面同样的问题 RecyclerView 内容显示不全

YvesCheung commented 3 years ago
CoordinatorLayout
    AppBarLayout
    RecyclerView

是大概这样的结构吗?我待会看看

appdev commented 3 years ago

是的,如果是这样的布局,列表无法全部显示展示,按照正常情况嵌套一个nest scrollview 就可以滑动了。但是似乎因为使用addview 方式的原因,导致嵌套之后,scrollview里面有两个view导致直接闪退了。

---原始邮件--- 发件人: @.> 发送时间: 2021年9月6日(周一) 中午12:00 收件人: @.>; 抄送: @.**@.>; 主题: Re: [YvesCheung/PageStatusTransformer] 嵌套使用列表无法显示完全,或者导致闪退 (#1)

CoordinatorLayout AppBarLayout RecyclerView

是大概这样的结构吗?我待会看看

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

YvesCheung commented 3 years ago

0fa1ca53c13f4ab2dcc477d9d5d8bbbbd3466d52 按这样的结构写了个demo,但并没有出现滑不动的问题。这个demo跟你的还有什么不同之处吗?

appdev commented 3 years ago

不是不能滑动,而是说内容显示不全。我明天写一个demo给你看看。

---原始邮件--- 发件人: @.> 发送时间: 2021年9月6日(周一) 晚上8:16 收件人: @.>; 抄送: @.**@.>; 主题: Re: [YvesCheung/PageStatusTransformer] 嵌套使用列表无法显示完全,或者导致闪退 (#1)

0fa1ca5 按这样的结构写了个demo,但并没有出现滑不动的问题。这个demo跟你的还有什么不同之处吗?

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

appdev commented 3 years ago

https://github.com/appdev/PageStatusTransformer/blob/193a76f6ab402994affc546c7d141e9a64e77cd7/app/src/main/java/com/huya/pitaya/pagestatustransformer/Issue1Activity.kt#L38

我在你原基础上写了一个简单的demo 你可以看看。之前以为是CoordinatorLayout造成的。现在发现是因为嵌套了ViewPager的原因

YvesCheung commented 3 years ago
CoordinatorLayout
    AppBarLayout
    ViewPager
        FrameLayout
            RecyclerView
PageStatusTransformer.newInstance(RecyclerView)

可以临时解决这个问题,更优雅的方式我后面再看看怎么适配ViewPager。 ScrollView嵌套RecyclerView是绝对不行的,这样RecyclerView高度会很大导致丧失复用机制。

appdev commented 3 years ago

这样子确实是可以的,暂时先这么解决吧。

appdev commented 3 years ago

不过 ScrollView问题还是希望能解决一下,ScrollView嵌套RecyclerView 只是举例,项目中有时候还是要用到ScrollView嵌套其他View的情况

YvesCheung commented 3 years ago

替换Fragment的rootView会导致ViewPager.childrenFragment.getView不一致,导致FragmentPagerAdapter#isViewFromObject方法判断错误,是无法在ViewPager中使用的原因。所以之前说的多套一层

ViewPager
    FrameLayout(Fragment)
        RecyclerView

应该是最好的解决办法了。这样才能保持Adapter的状态与ViewPager是一致的。

另外ScrollView的问题,已经修复: a6fbe9da26b67e3b84194be8bc2dacaade6c3e30 v1.0.11