在recyclerview android中以编程方式更改布局管理器

Posted

技术标签:

【中文标题】在recyclerview android中以编程方式更改布局管理器【英文标题】:Change layout Manager programatically in recylerview android 【发布时间】:2021-12-11 09:05:45 【问题描述】:

我想在视图膨胀时更改 layoutmanager stackFromEndreverseLayout。我有嵌套recyclerview。因此,当 recylerview 膨胀时,我需要检查 recylerview 是否有比单个屏幕更多的项目,即我有多个要滚动的项目。我会显示在图片中。

还有其他条件,当项目从底部边缘切掉一半时。

.

在此基础上,我想更改布局。有可能吗?怎么做? 我尝试了一些堆栈溢出Example,但它不起作用。那么有人知道如何实现这一目标吗?

所以我想知道当 RecyclerView 第一次完成放置它的项目时是否会调用任何侦听器,从而可以设置布局管理器。

【问题讨论】:

对不起,我可能对这个问题有误解,所以,你是不是在尝试加载更多机制? 我只想检查 recyclerview 是否有更多项目 @PutraNugraha 我想检查 RV 是否有更多物品,即当视图膨胀时,RV 物品第一次不适合。 我认为可以获得窗口高度,然后减去项目高度的总和(假设您有具有固定 layout_height 的回收站视图项目)。但是问题,这不是最佳实践 @PutraNugraha 你能给我示范一下吗? 【参考方案1】:

我假设您的回收站视图有一个父视图,例如NestedScrollView。然后,您需要在屏幕中创建 NestedScrollView 后获取它的高度

var nestedScrollViewHeight = 0
yourNestedScrollView.viewTreeObserver.addOnGlobalLayoutListener(
            object : ViewTreeObserver.OnGlobalLayoutListener 
                override fun onGlobalLayout() 
                    yourNestedScrollView.viewTreeObserver.removeOnGlobalLayoutListener(this)
                    nestedScrollViewHeight = yourNestedScrollView.height
                
            
        )

然后你可以检查这个NestedScrollView的高度是否超过你的屏幕高度,你可以在Activity中使用windowManager得到你的屏幕高度

val screenHeight = windowManager.currentWindowMetrics.bounds.height()

因此,在获得screenHeightnestedScrollViewHeight 之后,您可以进行减法以检查nestedScrollViewHeight 是否大于screenHeight

【讨论】:

例如,谢谢。需要将此代码放在我的活动中还是在我设置第二个适配器的第一个适配器中?另外,如果在我的活动中,我如何才能访问我的第二个适配器 RV? 我认为您需要通过放置代码来更新您的问题,这应该清楚该代码的放置位置

以上是关于在recyclerview android中以编程方式更改布局管理器的主要内容,如果未能解决你的问题,请参考以下文章

如图,Android 编程,右侧三个recyclerview布局,为啥是靠顶部,不是居中的?布局

以编程方式获取 Android 手机型号,如何在 android 中以编程方式获取设备名称和型号?

如何在android中以编程方式启用位置访问?

在android中以编程方式获取屏幕密度?

如何在 Android 10 中以编程方式安装任何 Android 应用

多个ListViews在android中以编程方式创建