2016-01-09 3 views
3

У меня проблема с моим просмотром Recycler и StaggeredGrid, которые разрезают ширину на 2. Я загружаю изображения в элементы с помощью Picasso, и когда я загружаю изображение в первый раз, они странно отображаются в представлении ресайклера , После перезагрузки все кажется хорошим.Android - StaggeredGrid неправильные настройки элементов

Я думаю, проблема связана с загрузкой изображения: StaggeredGrid не знает высоту изображения в первый раз, но знает после перезагрузки из-за кеша.

Как я могу решить эту проблему?

enter image description here

+1

Возможный дубликат [Android RecyclerView StaggeredGrid элементы изменить положение при прокрутке сверху] (http://stackoverflow.com/questions/ 34273295/android-recyclerview-staggeredgrid-items-change-position-when-scrolling-top) –

ответ

0

решаемые путем изменения стратегии разрыва с: автоматически

StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); 
    manager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS); 
    recyclerView.setLayoutManager(manager); 

Изменить положение вещей

1

Я думаю, вы сами ответили на свой вопрос. Вам необходимо загрузить изображения/определить их размеры перед добавлением данных в ресайклеров.

+0

Я уже думал сделать это, после попытки, это уже странно: когда я пытаюсь установить высоту изображения с высотой изображения, результат плохо. Я не понимаю систему изменения размеров изображений. – Okn

+0

Это немного другой вопрос. Вы можете решить эту проблему, используя предварительно определенные размеры изображения, путем измерения размеров изображения с вашими исходными данными, до тех пор, пока вы не сможете позже загрузить изображение, а затем определите, каковы границы представлений перед добавлением макета и т. Д. Вы были бы разумны чтобы попытаться предварительно задать размер изображений и задать новый вопрос конкретно, где вы застряли. –

0

Это происходит потому, что держатель дозы не признают ширину и высоту представления изображения при прокрутке вверх и вниз , Он очищает верхний вид при прокрутке вниз и наоборот.

Использование так:

@Override 
public void onBindViewHolder(ViewHolder viewHolder, int position) { 

MyViewHolder vh = (MyViewHolder) viewHolder; 
ImageModel item = imageModels.get(position); 
RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams)vh.imageView.getLayoutParams(); 
float ratio = item.getHeight()/item.getWidth(); 
rlp.height = (int) (rlp.width * ratio); 
vh.imageView.setLayoutParams(rlp); 
vh.positionTextView.setText("pos: " + position); 
vh.imageView.setRatio(item.getRatio()); 
Picasso.with(mContext).load(item.getUrl()).placeholder(PlaceHolderDrawableHelper.getBackgroundDrawable(position)).into(vh.imageView); 
} 

Для ясно видеть эту ссылку: Picasso/Glide-RecyclerView-StaggeredGridLayoutManager