0

展開可能なリストビューを持つレイアウトがあります。その中で、各子アイテムにはグリッドビューがあります。しかし、gridviewには独自のスクロールがあり、expandablelistviewにもあります。したがって、すべてのグリッドビューに固定長を設定する必要がありますが、動的な数のグリッドビューがあります。

hereから単一のグリッドビューの解決策を見つけました。

private OnGlobalLayoutListener mOnGlobalLayoutGridListener = new OnGlobalLayoutListener() {

    @SuppressWarnings("deprecation")
    @Override
    public void onGlobalLayout() {

        Debug.e("", "onGlobalLayout is called");

        if (gridView != null && gridView.getChildCount() > 0) {

            gridView.getViewTreeObserver().removeGlobalOnLayoutListener(
                    this);

            // gridView.get

            View lastChild = gridView
                    .getChildAt(gridView.getChildCount() - 1);

            int rows = gridView.getAdapter().getCount() / numColumns;
            int extra = gridView.getAdapter().getCount() % numColumns;

            if (extra > 0) {
                rows++;
            }

            int height = (int) (lastChild.getMeasuredHeight() * rows);

            gridView.setLayoutParams(new LinearLayout.LayoutParams(
                    LayoutParams.MATCH_PARENT, height));
        }

    }
};

OnGlobalLayoutListener特定の Gridview を参照しません。すべてのグリッドビューには異なる数のアイテムがあるため、すべてのグリッドビューにこのリスナーを使用することはできません。

ここを参照

ここに画像の説明を入力

誰でも私を助けることができますか?前もって感謝します。

4

1 に答える 1