簡體   English   中英

Recyclerview 僅顯示一項

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM