我有一个应用程序,以类似网格的方式显示项目列表,但不完全是......
有些物品的高度不同,所以靠近它们的高度应该与它们的高度相同。这个适用于GridLayoutManager。
有些项目(实际上只是我的第一项)需要跨越整行(这就是我使用StaggeredGridLayoutManager的原因)。
使用普通的GridLayoutManager,第一个要求很好:每行可以有不同的高度。但由于#2,它实际上毁了#1。
是否可以使用StaggeredGridLayoutManager,以便当项目具有不同的高度时,它们不会使它们在Y坐标中移动?
我在想:也许我可以使用NestedScrollView和GridLayoutManager(因为只有第一个项目是跨越的),但我仍然想知道在其他情况下是否可能(以及此解决方案)。
答案 0 :(得分:0)
好的,所以我仍然使用GridLayoutManager找到了一个可能的解决方案:
使用getItemViewType并返回跨越项目的特定值,并为普通项目返回不同的值。
根据类型在onCreateViewHolder中创建所需的视图,并根据类型转换为onBindViewHolder中所需的viewHolder类。
使用setSpanSizeLookup,在getSpanSize内部,如果类型适用于此类项目,则返回已跨越的单元格
示例:
@Override
public int getItemViewType(final int position)
{
return position==0?VIEW_TYPE_HEADER:VIEW_TYPE_NORMAL;
}
public ViewHolder onCreateViewHolder(final ViewGroup parent,final int viewType)
{
if(viewType==VIEW_TYPE_HEADER) ... //create header ViewHolder
else ... // create normal item
}
...
_layoutManager=new GridLayoutManager(...,3,LinearLayoutManager.VERTICAL,false);
_layoutManager.setSpanSizeLookup(new SpanSizeLookup()
{
@Override
public int getSpanSize(final int position)
{
return _adapter.getItemViewType(position)==VIEW_TYPE_HEADER?_layoutManager.getSpanCount():1;
}
});
不过,我想知道如何使用NestedScrollView解决方案
我注意到的一个问题是,如果我尝试将标头的可见性设置为GONE,它仍然需要空间。