26

一个快速的问题:

ListView我使用这段代码:

list.addHeaderView(headerView);

工作时如何处理gridview

谢谢。

4

11 回答 11

32

不支持带有 的页眉或页脚视图GridView,抱歉。

于 2011-04-26T13:03:40.680 回答
25

在 Google Photos 应用程序中有一个非常好的带有标头支持的 GridView 实现,因为它是 OSS 代码,您可以按原样使用它或将其作为您自己实现的参考:http: //grepcode.com/file/repository.grepcode .com/java/ext/com.google.android/android-apps/4.3_r2.1/com/android/photos/views/HeaderGridView.java

基本思想非常简单 - WrapperAdapter 通过按列数增加项目数来创建一个假行,然后返回项目的标题视图。

于 2014-01-16T09:02:13.683 回答
5

你可以使用这个。当您到达/离开最后一个项目数时,页脚会出现/隐藏在网格底部。它实际上并没有滚动,但我几乎没有注意到差异。

在您的活动/片段的 onCreate/onCreateView 中,您将 OnScrollListener 添加到 GridView:

    ....
    GridView gridview = (YMAnimatedGridview) v.findViewById(R.id.my_gridview);
    gridview.setAdapter(adapter);
    final View footerView = mainView
            .findViewById(R.id.my_grid_footer_view);
    gridview.setOnScrollListener(new GridView.OnScrollListener() {

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {

                if (firstVisibleItem + visibleItemCount == totalItemCount) {

                    // last item in grid is on the screen, show footer:
                    footerView.setVisibility(View.VISIBLE);

                } else if (footerView.getVisibility() != View.GONE) {

                    // last item in grid not on the screen, hide footer:
                    footerView.setVisibility(View.GONE);
                }
            }

        @Override
        public void onScrollStateChanged(AbsListView view,
                int scrollState) {
        }
    });

您的布局应如下所示。注意gridview中的layout_weight(和layout_height)参数,当它变得可见时,需要为页脚留出正确的空间。

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <GridView
        android:id="@+id/my_gridview"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:columnWidth="160dp"
        android:gravity="center_horizontal"
        android:horizontalSpacing="12dp"
        android:numColumns="auto_fit"
        android:layout_weight="1"
        android:stretchMode="columnWidth"
        android:verticalSpacing="6dp" />

    <TextView
        android:id="@+id/my_grid_footer_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:layout_marginBottom="8dp"
        android:orientation="horizontal"
        android:visibility="gone"
        android:text="footer text here" >
    </TextView>
</LinearLayout>
于 2013-12-10T08:41:41.217 回答
5

在此处输入图像描述

示例代码:

GridViewWithHeaderAndFooter gridView = (GridViewWithHeaderAndFooter) v.findViewById(R.id.ly_image_list_grid);

LayoutInflater layoutInflater = LayoutInflater.from(this);
View headerView = layoutInflater.inflate(R.layout.test_header_view, null);
View footerView = layoutInflater.inflate(R.layout.test_footer_view, null);
gridView.addHeaderView(headerView);
gridView.addFooterView(footerView);

摇篮构建:。

compile 'in.srain.cube:grid-view-with-header-footer:1.0.12'
于 2015-09-07T05:10:44.437 回答
4

您必须使用 ListView,然后使列表的每一行看起来就像它实际上是网格的一行。因此,如果您有一个 3 列网格,您将为 ListView 创建一个看起来像 3 列的布局。然后,您必须修改 Adapter 的某些方面以使其工作,以便每个 ListView 行实际上代表 3 行数据——所以您知道,getCount()/3 类型的东西。

于 2012-06-29T20:31:25.410 回答
4

检查适配器中的“0”索引元素怎么样?您可以为第一个扩展自定义视图。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = convertView;
            if(view==null){
                 if(position==0){
                      //  ...inflate header view
                 }else{
                      //  ...do as usual

没有测试过,但应该可以。

于 2014-01-07T20:35:42.180 回答
2

您可以使用AsymmetricGridView并使用更大的 rowSpan 指定页眉/页脚,以便它们占据整行。

于 2014-04-15T17:18:53.617 回答
1

你为什么不改变第一行的单元格的外观?如果你知道你有多少列,你就知道标题中会出现多少项 = 列数。它对我有用

于 2011-06-15T00:33:39.447 回答
1

你可以使用这个库,http ://tonicartos.github.io/StickyGridHeaders/

它允许您创建粘性标题(用于对列表进行分组并保持标题对当前组可见)。您也可以关闭粘性功能。

于 2014-03-27T19:41:11.083 回答
1

有一种方法可以在不使用库或任何东西的情况下完成所需的功能。

编辑:只需借用谷歌的 HeaderGridView 实现,请参见此处
您也可以为页脚自定义它。下面的建议太复杂了,需要更多的调整。无需详细说明,您需要做的就是这个。

1) 子类 GridView
2) 覆盖 onScrollChanged
3) 每次滚动时计算偏移量
4) 将 parentView(包含 headerView 和 gridview 的视图) 翻译 y 设置为 -Offset.(view.setTranslationY(-offset)。还有一个 if 语句一旦它达到一定的偏移量,它就会停止滚动
。5)显然你想很好地构造这个,所以你的gridview可以有一个像attachToGridview(View view)这样的方法。我有一个完整的实现。
有关获取偏移的帮助,请参阅GridView 的滚动偏移,因为 GridView 在视图被回收时存在错误。

于 2015-09-24T22:35:16.577 回答
-2
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"
              android:layout_height="fill_parent" android:orientation="vertical">

    <com.test.Breadcrumbs android:layout_width="fill_parent" android:layout_height="100dp" />

    <GridView
            android:id="@+id/grid"
            android:numColumns="auto_fit"
            android:gravity="center"
            android:stretchMode="columnWidth"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:verticalSpacing="10dp"
            android:horizontalSpacing="10dp">
    </GridView>

</LinearLayout>

和面包屑:

public class Breadcrumbs extends LinearLayout {

    public Breadcrumbs(final Context context, final AttributeSet attrs) {
        super(context, attrs);

        final LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        layoutView = inflater.inflate(R.layout.breadcrumbs, this, true);

工作正常,滚动网格也可以。

于 2012-07-18T07:00:19.073 回答