Размещение 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);
}