【问题标题】:Add a full width header item to a Grid View in AbsListView (Xamarin)在 AbsListView (Xamarin) 中将全宽标题项添加到网格视图
【发布时间】:2025-11-22 05:40:02
【问题描述】:

我的应用中有一个列表,它被实现为 AbsListView,因此当我们在较小的屏幕(手机)上工作时,它是一个列表,而当我们在较大的屏幕(平板电脑)上工作时,它是一个网格。 一切正常。

现在我想添加一个与列表中的常规项目完全不同的标题项目 - 它有一个完全不同的 xml 文件。它始终是列表中的第一项。

我已将代码添加到我的适配器类中,如下所示:

    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        SavedInfo subViews = null;
        var rowView = convertView;
        var channel = items[position];

        // don't want to reuse if our previous view was a header
        if (rowView?.Tag != null)
        {
            subViews = rowView.Tag as SavedInfo;
        }

        // try to put in a different view if there is a header shown
        // special id value for header is -1
        if (position == 0)
        {
            subViews = null;
        }

        if (subViews == null)
        {
            if (position == 0)
            {
                rowView = context.Activity.LayoutInflater.Inflate(Resource.Layout.header_layout, null);

                // Do setup stuff with this layout
                rowView.Tag = null;
                return rowView;
            }

            rowView = context.Activity.LayoutInflater.Inflate(cellLayout, null);

            // Do stuff with regular layout, take savedInfo from Tag
            rowView.Tag = subViews;
        }

        // other adjustments to the regular layout

        return rowView;
    }

所以在常规列表中这很好 - 我有一个标题项目和许多常规项目。但是,当我切换到 GridView(使用相同的适配器)时,我的“标题”项现在只是网格中的第一个单元格。

想要它的样子与列表视图中的差不多 - 单列填充屏幕的宽度,然后是常规网格。关键是我想要一个填充所有列的项目,但随着网格向上滚动。有没有办法做到这一点?我知道我可能需要用某种自定义适配器视图替换。有没有人有一个用一个项目填充多个网格列的网格的代码示例?

谢谢

【问题讨论】:

    标签: android listview gridview xamarin customization


    【解决方案1】:

    事实证明这是不可能的 - 放置标题的推荐方法是在将 ListView 更改为 RecyclerView 时使用 CoordinatorLayout 和 CollapsingToolbarLayout

    【讨论】: