[英]Recyclerview showing only one item
我創建了帶有標題類型和項目類型的 recyclerview。 我已將 wrap_content 賦予為相同的布局創建的布局。 在適配器中,我根據視圖類型分離了視圖。
我在列表中有 2 個項目,其中包含日期和 imageurl 列表。 我只能看到第 1 個日期和第 3 個圖像中的一個圖像,第 1 個項目和第 2 個項目中的其他圖像不可見。
我正在為 recyclerview 使用 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"]
}
]
}
}
下面是 recyclerview 設置
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>
媒體片段
<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>
我在回答之后看到了這個布局
改變這個:
<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>
對此:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="wrap_content" <----
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>
您正在設置具有 3 列的網格布局管理器,但如果您開始水平滾動,您的列寬為"match_parent"
,一旦將其更改為"wrap_content"
,您將看到您的項目在那里,它將顯示所有可能的項目適合1 屏幕寬度
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.