【发布时间】:2016-04-11 00:37:23
【问题描述】:
我有一个RecyclerView,其中的项目是LinearLayout,其中有几个TextViews 作为孩子。根据某些规则(这在onBindViewHolder 中决定),TextViews 可能会被隐藏(可见性消失)或显示。
我的问题是,如果我在 RecyclerView 中有 3 个项目(A、B 和 C),可见 TextViews 的数量相同,并且 A 在列表顶部,B 在中间,C在底部,例如,如果 B 必须显示比以前更多的 TextViews,则在短时间内,该项目 (B) 将与 C 重叠,因为它已经变大并且必须适应新可见的 TextViews之前的知名度已经消失。
问题的可视化表示:
期望的情况
当前和不希望的情况
稍后RecyclerView会正确容纳该项目。
我怎样才能避免这种情况发生?
编辑:
在其中一个 cmets 中建议我可能必须自己制作动画并转换视图。这是必要的还是有另一种方法?如果是这样,我如何为视图设置动画和转换?
编辑 2:
试过这个答案:Animating items,但问题仍然存在。在RecyclerView 更新之前存在明显的延迟。
编辑 3:
我使用这个类 (RecyclerViewCursorAdapter) 作为填充 RecyclerView 的适配器的基础。此外,我在onResume 中这样做了
@Override
public void onResume()
{
super.onResume();
if(getActivity().getSupportLoaderManager().getLoader(R.id.myLoaderId) == null)
{
getActivity().getSupportLoaderManager().initLoader(R.id.myLoaderId, null, this);
}
else
{
getActivity().getSupportLoaderManager().restartLoader(R.id.myLoaderId, null, this);
}
}
【问题讨论】:
-
尝试使用
TextViewsINVISIBLE而不是GONE。 -
你能发布你的代码来显示发生了什么吗?如果数据发生变化,您应该能够简单地调用 recyclerView.getAdapter().notifyDataSetChanged();它应该正确重绘recyclerView。
-
@LNI 我正在这样做,但如前所述,问题在短时间内出现(我猜
RecyclerView更新时),然后它被正确呈现。 -
@sonictt1 这会在项目中留下“漏洞”,因为有些项目会有一些
TextViews处于活动状态,而另一些则不会,因此对我来说会有不受欢迎的外观。 -
你的问题不清楚。也许您可以发布一张图片,以便更好地说明您要描述的内容。
标签: android android-recyclerview