Я создал переработчик с типом заголовка и типом элемента. Я дал wrap_content для макетов, созданных для того же. В адаптере я разделил представления по типу представления.
У меня есть 2 элемента в списке, в котором есть дата и список изображений. Я могу видеть только 1-ую дату и одно изображение из 3-х и другие изображения в 1-м элементе, а 2-й элемент не виден.
Я использую диспетчер gridlayout для просмотра переработчика.
Ниже мой адаптер и фрагмент кода.
public class MediaAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private ArrayList<Media> mediaArrayList;
private Context context;
public static final int TYPE_HEADER = 0;
public static final int TYPE_ITEM = 1;
private ArrayList<String> imageURls;
public MediaAdapter(Context context,ArrayList<Media> mediaArrayList)
{
this.context = context;
this.mediaArrayList = mediaArrayList;
this.imageURls = new ArrayList<>();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
if (viewType == TYPE_HEADER) {
View v = inflater.inflate(R.layout.media_item_header_layout, parent, false);
return new MediaViewHeader(v);
} else {
View v = inflater.inflate(R.layout.media_item_layout, parent, false);
return new MediaItemView(v);
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
Media media = mediaArrayList.get(position);
if (holder instanceof MediaViewHeader) {
MediaViewHeader mediaViewHeader = (MediaViewHeader) holder;
mediaViewHeader.textViewDate.setText(media.getDate());
} else if (holder instanceof MediaItemView) {
MediaItemView mediaItemView = (MediaItemView) holder;
imageURls = media.getImageUrl();
for (String url : imageURls) {
if (!TextUtils.isEmpty(media.getImageUrl().toString())) {
Picasso.get()
.load(url)
.resize(300, 250)
.placeholder(R.drawable.progress_animation_small)
.error(R.drawable.ic_avatar_small)
.into(mediaItemView.imageViewPhoto);
} else {
mediaItemView.imageViewPhoto.setImageDrawable(ContextCompat.getDrawable(context,
R.drawable.ic_avatar_small));
}
}
}
}
@Override
public int getItemCount () {
return mediaArrayList.size();
}
@Override
public int getItemViewType ( int position){
if (isPositionHeader(position))
return TYPE_HEADER;
else return TYPE_ITEM;
}
private boolean isPositionHeader ( int position){
return position == 0;
}
class MediaItemView extends RecyclerView.ViewHolder {
ImageView imageViewPhoto;
public MediaItemView(View itemView) {
super(itemView);
imageViewPhoto = itemView.findViewById(R.id.image_photo);
}
}
class MediaViewHeader extends RecyclerView.ViewHolder {
private TextView textViewDate;
public MediaViewHeader(View itemView) {
super(itemView);
textViewDate = itemView.findViewById(R.id.text_date);
}
}
}
Я проверил, получаю ли я ответ от API. Я получаю следующий ответ.
{
"status": "success",
"requestId": null,
"result": {
"media": [{
"date": "03 April 19",
"imageUrl": ["https://i.imgur.com/I86rTVl.jpg", "https://i.imgur.com/I86rTVl.jpg", "https://i.imgur.com/I86rTVl.jpg"]
},
{
"date": "02 April 19",
"imageUrl": ["https://i.imgur.com/I86rTVl.jpg", "https://i.imgur.com/I86rTVl.jpg", "https://i.imgur.com/I86rTVl.jpg"]
}
]
}
}
Ниже настроено представление переработчика
public void setUpRecyclerView() {
mediaArrayList = new ArrayList<>();
final GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 3);
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
if (MediaAdapter.TYPE_HEADER == mediaAdapter.getItemViewType(position)) {
return 1;
}
return 2;
}
});
recyclerViewMedia.setLayoutManager(gridLayoutManager);
mediaAdapter = new MediaAdapter(getActivity(), mediaArrayList);
recyclerViewMedia.setAdapter(mediaAdapter);
getMediaList();
}
Пожалуйста, проверьте. Спасибо ...
РЕДАКТИРОВАТЬ:
media_item_header_layout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/text_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:textColor="#70666666"
android:fontFamily="@font/notosans_semibold"
android:letterSpacing="-0.02"
android:text="03 April 19 "
android:layout_marginTop="21dp"/>
</LinearLayout>
media_item_layout
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image_photo"
android:layout_width="96dp"
android:layout_height="96dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:background="@drawable/media_item_image_background">
</ImageView>
</RelativeLayout>
media_fragment
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f8f8fb">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview_media"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="@dimen/padding_20"
android:layout_marginLeft="@dimen/padding_20">
</androidx.recyclerview.widget.RecyclerView>
</RelativeLayout>
I см. этот макет после ответа
введите описание изображения здесь