26

簡単な質問:

私はこのListViewコードを使用します:

list.addHeaderView(headerView);

作業中の対処方法はgridview

ありがとう。

4

11 に答える 11

32

を使用したヘッダー ビューまたはフッター ビューはサポートされていGridViewません。申し訳ありません。

于 2011-04-26T13:03:40.680 に答える
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 は、項目の数を列の数だけ増やして偽の行を作成し、項目のヘッダー ビューを返します。

于 2014-01-16T09:02:13.683 に答える
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 ビルド: .

compile 'in.srain.cube:grid-view-with-header-footer:1.0.12'
于 2015-09-07T05:10:44.437 に答える
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 に答える
4

ListView を使用してから、リストの各行が実際にはグリッドの行のように見えるようにする必要があります。したがって、3 列のグリッドがある場合は、3 列のように見える ListView のレイアウトを作成します。次に、アダプターの特定の側面を変更して、ListView の各行が実際に 3 行のデータを表すように機能させる必要があります。つまり、getCount()/3 型のものです。

于 2012-06-29T20:31:25.410 に答える
2

AsymmetricGridViewを使用して、より大きな rowSpan でヘッダー/フッターを指定して、行全体を取得することができます。

于 2014-04-15T17:18:53.617 に答える
1

このライブラリを使用できますhttp://tonicartos.github.io/StickyGridHeaders/

これにより、スティッキーなヘッダーを作成できます (リストをグループ化し、ヘッダーを現在のグループに表示し続けるため)。スティッキー機能をオフにすることもできます。

于 2014-03-27T19:41:11.083 に答える
1

最初の行のセルの外観を変更してみませんか? 列の数がわかっている場合は、ヘッダーに表示される項目の数 = 列の数がわかります。

于 2011-06-15T00:33:39.447 に答える
1

ライブラリなどを使用せずに、目的の機能を実現する方法があります。

編集: Google による HeaderGridView 実装を借りるだけです。ここ
を参照してください 。フッター用にカスタマイズすることもできます。以下の提案は複雑すぎて、さらに調整が必要です。具体的な詳細は省きますが、これだけで十分です。

1) GridView をサブクラス化する
2) onScrollChanged をオーバーライドする
3) スクロールするたびにオフセットを計算する
4) parentView(headerView と gridview を含むビュー) の変換 y を -Offset.(view.setTranslationY(-offset) に設定します。また、if ステートメントも用意します。特定のオフセットに達すると、スクロールが停止します.
5) 明らかに、グリッドビューに 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 に答える