gpt4 book ai didi

android - 使用网格布局在 RecyclerView 上实现 header 的最佳方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:22:09 25 4
gpt4 key购买 nike

我正在尝试实现下图。我的第一个想法是让网格布局上方的所有内容成为网格的第一行,并使用 SpanSizeLookup 将跨度大小设置为 RecyclerView 中的列数,但这感觉会给我带来很多问题。

我一直在阅读有关将 RecyclerView 放入 NestedScrollView 的内容,人们说它有效,但我似乎无法使其正常工作。滚动似乎无法正常工作,如果不设置 minHeight,我什至无法让网格显示出来,但它看起来很糟糕。

是否还有我没有考虑的其他选择,或者其中之一是我应该走的方向?

Here's what I'm trying to achieve

最佳答案

您预计 SpanSizeLookup 会出现什么样的问题?您可以使用如下几行来实现它(为了灵 active ,我建议使用 integers.xml 中的值)。

GridLayoutManager glm = new GridLayoutManager(getContext(), 3);
glm.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override public int getSpanSize(int position) {
return (position == 0) ? 3 : 1;
}
});

如果您的页眉布局需要您的常规布局没有的 View 和字段,您需要创建单独的 View 并将它们告诉您的适配器。像这样。

@Override
public int getItemViewType(int position) {
if (position == 0)
return TYPE_HEADER;
else
return TYPE_REGULAR;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_HEADER) {
MyHeaderView view = (MyHeaderView) LayoutInflater
.from(parent.getContext())
.inflate(R.layout.my_header_view, parent, false);
return new MyHeaderViewHolder(view);
} else {
MyRegularView view = (MyRegularView) LayoutInflater
.from(parent.getContext())
.inflate(R.layout.my_regular_view, parent, false);
return new MyRegularViewHolder(view);
}
}

一个示例标题 View 可能是这样的(你会从 MyHeaderViewHolder 调用 bindTo())。

public final class MyHeaderView extends LinearLayout {
@Bind(R.id.image) ImageView imageView;
@Bind(R.id.title) TextView titleView;

public MyHeaderView(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
protected void onFinishInflate() {
super.onFinishInflate();
ButterKnife.bind(this);
}

public void bindTo(String imageUrl, String title) {
Glide.with(getContext())
.load(imageUrl).into(imageView);
titleView.setText(title);
}
}

关于android - 使用网格布局在 RecyclerView 上实现 header 的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33579800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com