我想要达到的目标
项目视图应占据项目的整个高度
可能是项目的高度小于回收视图中最高项目的高度,在这种情况下,它应该像上面的截图一样粘在顶部。
我遇到的虫子
正如上面的截图所示,视图正在被截断。
到目前为止我都试过了
起初,我在回收视图上使用wrap_content,现在它得到了支持。当当时屏幕上可见的视图都不是最高的时,它就不起作用了。这在视图层次结构的布局中是有意义的。如果高度依赖于任何数据,那么甚至还没有绑定到任何数据的东西的高度如何计算呢?
变通时间:S
我没有尝试自定义布局管理器,而是先做了我觉得需要做的事情——在开始时列出所有项目视图来计算它们的高度。
屏幕上部有一个progressbar和一个动画播放,以吸引用户的注意力,而所有这些都是在recyclerview visibility设置为invisible时发生的。我使用了两种方法,一种是不够的——我在适配器的onViewAttached()
调用中附加了一个观察者,还使用了一个滚动更改侦听器。有一个LinearSnapHelper连接到回收器视图,可以捕捉到滚动上相邻(下一个或上一个,取决于滚动方向)的位置。
在这个设置中,
>
View currentChildView = binding.nextRv.getChildAt(layoutManager.findFirstCompletelyVisibleItemPosition());
if (currentChildView != null) {
currentChildHeight = currentChildView.getHeight();
}
在RecyclerView上滚动change listener。滚动_STATE_IDLE
,或者将高度传递给适配器的onViewAttachedToWindow()中提到的视图连接观察者
@Override
public void onViewAttachedToWindow(BindingViewHolder holder) {
if (mObserver != null) {
mObserver.onViewAttached(holder.binding.getRoot().getHeight());
}
}
很明显,这很难看。另外,它没有给我当前视图的高度——“附加”意味着它只是附加的,而不是测量和布局的。这是回收的视图,而不是绑定到当前数据项的视图。这就带来了如上所示的视图截断等问题。
我还尝试过在“回收者”视图中显示“包裹内容高度”,并从回收者的家长处进行无效处理,直到回收者和滚动条上的孩子进入滚动状态。没用。
我不知道如何自定义布局管理器可以帮助这里。
有人能指引我正确的方向吗?
我认为recyclerview可以设置为高度wrap\u content
。而且这些项目可以像高度一样匹配父项。
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layput_height="wrap_content"/>
项目如下:
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
// your coode
</androidx.constraintlayout.widget.ConstraintLayout>
我的要求只不过是这个问题。连我的问题都解决了。
记住我正在使用:
安德洛伊德。recyclerview:recyclerview:1.0.0-beta01
项目的依赖性
在你的适配器里,我可以找到两张卡,一张在上面,另一张在下面
我如何定义我的布局是这样的:
Cardview1
LinearLayout1 --> orientation vertical
cardview2 (Top card where text is written)
Linearlayout2 (where I can see icons such as like etc)-->orientation horizontal
现在通过将Linearlayout2设置为包装内容来修复其高度。
cardview2的高度应为0dp,加上重量=1
现在在cardview2中添加一个TextView1来匹配高度和宽度。
更好的内置文本视图1在结尾处添加省略号并添加最大行数
如果你想显示所有的行,可以在这里找到autoresizetextview库--
希望有帮助。
我不能接受@Praave Kumar Kushwaha的回答,因为针对一个解决方案,我不希望列表中出现不同的字体大小。一致性是设计中的一个关键因素。他给出的第二种选择不起作用,因为对于椭圆大小,我需要给用户一个某种“更多”按钮来阅读整个内容,而我的文本视图已经在进行点击操作。把更多放在其他地方同样不是好的设计。
通过调整recyclerview的大小来改变设计。当最高的、被截断的项成为焦点时,它就变成了notifyItemChanged()的简单用例。即使我尝试使用连接视图的观察器和滚动状态监听器,也可以使用notifyItemChanged,但这种方法太粗糙了。这一点我在代码和设计上都能接受。下面是所需的代码。
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
int position = ((LinearLayoutManager) binding.nextRv.getLayoutManager())
.findFirstVisibleItemPosition();
if (position != nextSnippetAdapter.getItemCount() - 1) {
binding.nextRv.getAdapter().notifyItemRangeChanged(position, 2);
} else {
binding.nextRv.getAdapter().notifyItemChanged(position);
}
}
}
对于我的特定设置,只调用这两个元素。它可以进一步优化,以便在大多数情况下在位置1
处调用单个元素,并在角落(文字)情况下检查和调用适当的元素。
我试图实现带有水平滚动的,所以我使用了带有水平方向的。问题是,我使用2种不同类型的项目填充RecyclerView,具有不同的高度。这是我对项目使用的布局: 这是包含的布局,基本上是这样的: 我使用的是一个,我只是更改了两个子视图的可见性。 我希望得到的结果是: 但我得到的是这个;使用第二种物品的高度将CardView切成两半: 我看到了这个帖子,和我的问题差不多,它推荐使用,于是,我尝试实现:
我正在尝试为水平回收视图实现ItemTouchHelper。(将布局管理器设置为LinearLayoutManager,方向为LinearLayoutManager.HORIZONTAL)。例如,我想在向下滑动并向左或向右拖动以交换项目时删除项目。 我所经历的所有示例都解释了ItemTouchHelper的垂直回收站视图或网格中的项目。 以下示例来自以下链接: https://medium.com
当我按下后退按钮时,这个ShoppingActivity会被破坏,当我再次访问该activity时,我发现我的回收器视图项目被替换了两次。我该如何解决这个问题? ShoppingActivity.java这里编写的所有代码和volley类也在这里调用,当我按下后退键并再次访问该活动时,我发现我的回收器视图项被替换了 @override protected void onCreate(Bundle
我想知道是否有任何可能的方法使用RecyclerView? 在此之前,我在ScrollView中使用了具有固定高度的RecyclerView,但这次我不知道项目的高度。 提示:在提出这个问题之前,我阅读了堆栈问题的所有问题和解决方案。 更新:一些解决方案显示了如何自行滚动RecyclerView,但我想显示它已扩展。
我想做的从右到左滚动与我猜将是一个recylcer视图,但不确定是否是这个。我只是需要有人给我指明正确的方向。我想我需要一个内部布局的回收视图。 如果有人能指点我在哪里找到答案,我会变得很伟大!
新加入WPF的我正尝试使用TreeView,它提供的灵活性给我留下了难以置信的印象。 到目前为止,我的每个treeview项目都实现了一个扩展器,这是显示每个项目更详细信息并让标题仅显示摘要的好方法。但是,这不适合叶项目,并且浪费了屏幕空间——我的treeview中的每个叶项目(其中有许多)显示的数据量相对较小。 我想要为叶项目实现的是水平包装,而不是垂直列表。设想显示一个网格或(stackpan