Я пытаюсь достичь customn RowSpan в StaggeredGridКак реализовать Dynamic Row Span в StaggeredGridLayoutManager
Как динамически изменять RowSpan моего StaggeredGridLayout. Существует одна реализация предложена @Gabriele Mariotti
StaggeredGridLayoutManager.LayoutParams layoutParams =StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams();
layoutParams.setFullSpan(true);
Но я не могу заставить его работать. Пожалуйста, предложите мне некоторые способы реализовать это.
Вот код для моего класса адаптера, который расширяет адаптер Recycler вместе с классом Вид держателя в виде вложенного класса
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
LayoutInflater inflater;
Context context;
List<Information> data= Collections.emptyList();
public MyAdapter(Context context,List<Information>data)
{
inflater= LayoutInflater.from(context);
this.context=context;
this.data=data;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view=inflater.inflate(R.layout.custom_layout,parent,false);
MyViewHolder holder=new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Information current=data.get(position);
holder.imageView.setImageResource(current.iconid);
if(position==0) {
StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) holder.itemView.getLayoutParams();
layoutParams.setFullSpan(true);
}
}
@Override
public int getItemCount() {
return 8;
}
class MyViewHolder extends RecyclerView.ViewHolder{
ImageView imageView;
public MyViewHolder(View itemView) {
super(itemView);
imageView= (ImageView) itemView.findViewById(R.id.image);
}
}
}
Ну, я пробовал этот трюк, и да, он работает: '). Но суть в том, что мои изображения извлекаются через файл JSON, и нет никаких фиксированных позиций относительно того, какие изображения будут выбраны для охвата одного столбца или двух столбцов. Является ли это тем, что я могу сделать это динамически, зависит от ширины изображения? Кроме того, yeh это шаблон, который я искал, я на самом деле хочу реализовать шахматный макет. –
Тогда подход будет состоять в том, чтобы использовать параметр позиции для получения элемента из адаптера (вам нужно получить ссылку на адаптер в 'SpanSizeLookup', возможно, путем подкласса), посмотрите на ширину изображения на этом элементе и верните размер диапазона на основе этого. Надеемся, ваши данные JSON скажут вам, является ли это широкоформатным или нет, поэтому вам не нужно дождаться загрузки самого изображения, чтобы выяснить размер пролета. Если нет, то вы можете добавить что-то в свой JSON, чтобы помочь вам определить размер диапазона. Если вы разместите свой код адаптера, я могу отправить пример кода для этого. –
Я сделал редактирование на вопрос, –