Размещение StaggeredGridView внутри прокрутки в Android

В моем приложении я использую StaggeredGridView, и он работает нормально. Но когда я поместил его в scorllview и попытался прокрутить его, к сожалению, высота StaggeredGridView не совпадает с точным видом сетки.

Для управления прокруткой я динамически вычисляю высоту вида сетки и устанавливаю ее для вида сетки программно с помощью элементов на основе дочерних элементов. я думаю, что это будет проблемой..

здесь главная проблема заключается в том, что высота элемента будет не такой, как у обычного вида сетки.

Вот мой код для setGridViewHeightBasedOnChildren

public static void setListViewHeightBasedOnChildren(StaggeredGridView listView) {

SampleAdapter listAdapter = (SampleAdapter) listView.getAdapter();
if (listAdapter == null)
    return;

int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.UNSPECIFIED);
int totalHeight = 0;
View view = null;

for (int i = 0; i < listAdapter.getCount(); i++) {
    view = listAdapter.getView(i, view, listView);
    if (i == 0)
        view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, LayoutParams.WRAP_CONTENT));

    view.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
    totalHeight += view.getMeasuredHeight();
}

ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getHeight() * (listAdapter.getCount() - 1));

listView.setLayoutParams(params);
listView.requestLayout();
  }

Может ли кто-нибудь помочь мне поместить StaggeredGridView в представление прокрутки.. Заранее спасибо

1 ответ

Попробуйте использовать приведенный ниже код с пропуском no столбца:

public void setListViewHeightBasedOnChildren(StaggeredGridView staggeredGridView, int columns) {
        SampleAdapter listAdapter = (SampleAdapter) staggeredGridView.getAdapter(); 
        if (listAdapter == null) {
            // pre-condition
            return;
        }

        int totalHeight = 0;
        int items = listAdapter.getCount();
        int rows = 0;

        View listItem = listAdapter.getView(0, null, staggeredGridView);
        listItem.measure(0, 0);
        totalHeight = listItem.getMeasuredHeight();

        float x = 1;
        if( items > columns ){
            x = items/columns;
            rows = (int) (x + 1);
            totalHeight *= rows;
        }

        ViewGroup.LayoutParams params = gridView.getLayoutParams();
        params.height = totalHeight;
        gridView.setLayoutParams(params);

}
Другие вопросы по тегам