一个简单的问题:
在ListView
我使用此代码:
list.addHeaderView(headerView);
在处理gridview
时如何处理?
感谢。
答案 0 :(得分:32)
GridView
不支持页眉或页脚视图,抱歉。
答案 1 :(得分:25)
在Google相册应用程序中有一个非常好的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通过按列数增加项目数来创建假行,然后返回项目的标题视图。
答案 2 :(得分:5)
你可以用它。当您到达/离开最后一个项目数时,页脚会显示/隐藏在网格的底部。它实际上并没有滚动,但我几乎没有注意到它的区别。
在您的activity / fragment的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>
答案 3 :(得分: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);
Gradle build:
compile 'in.srain.cube:grid-view-with-header-footer:1.0.12'
答案 4 :(得分:4)
您必须使用ListView,然后使列表的每一行看起来像它实际上是一行网格。因此,如果您有一个3列网格,那么您将为ListView创建一个看起来像3列的布局。然后,您必须修改适配器的某些方面以使其工作,以便每个ListView行实际上代表3行数据 - 所以你知道,getCount()/ 3类型的东西。
答案 5 :(得分: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
没有测试过,但应该可以使用。
答案 6 :(得分:2)
您可以使用AsymmetricGridView并使用更大的rowSpan指定页眉/页脚,以便它们占据整行。
答案 7 :(得分:1)
为什么不更改第一行的单元格外观?如果你知道你有多少列,你知道标题中会出现多少项=列数。这对我有用
答案 8 :(得分:1)
您可以使用此库http://tonicartos.github.io/StickyGridHeaders/
允许您创建粘滞的标题(用于对列表进行分组并保持标题对当前组可见)。您也可以关闭粘性功能。
答案 9 :(得分:1)
有一种方法可以在不使用库或任何东西的情况下完成所需的功能。
编辑:只需借用谷歌的HeaderGridView实现,请参阅Here
您也可以为页脚自定义它。以下建议太复杂,需要更多调整。
没有详细说明,您需要做的就是这个。
1)子类GridView
2)覆盖onScrollChanged
3)每次滚动时计算偏移量
4)将parentView(包含headerView和gridview的视图)转换为-Offset。(view.setTranslationY(-offset)。一旦到达某个偏移量,它也会有一个if语句,它将停止滚动。
5)显然你想要很好地构建这个,所以你的gridview可以有一个像attachToGridview(View view)这样的方法。我有一个完整的实现这个工作
有关获取偏移量的帮助,请参阅Scroll offset of GridView,因为GridView有一个错误,即视图被回收。
答案 10 :(得分:-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);
工作正常,滚动网格也可以。