Horizontal recyclerview inside Android vertical recyclerview

I'm trying to do such a thing

Therefore, my idea is that I have a vertical recyclerview with a channel, and in the second position of the channel, I should have a horizontal recyclerview with replay

I'm not sure what to do. I tried to mess up the viewholder and guess I should only be in my own channel_ Create a recyclerview in the details layout and add it to the item_ channel_ The other is made into an item in details, but I can't make it work

This is my code

ChannelDetailsActivity:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_channel_details);

    ImageView coverPhoto = (ImageView) findViewById(R.id.image_cover_details);
    final HexagonImageView avatarPhoto = (HexagonImageView) findViewById(R.id.img_hex);
    TextView toolbarText = (TextView) findViewById(R.id.txt_toolbar_title);

    final Bundle b = getIntent().getExtras();
    final MNetworkChannel parcelChannel =
            b.getParcelable(Const.IntentData.H_CHANNEL_LIST);

    final MVideosForChannel parcelVideosForChannel = b.getParcelable(Const.IntentData.D_VIDEOS_LIST);




    setChannelsView();
    setVideosView();


}

private void setChannelsView() {

    rvRelive = (RecyclerView) findViewById(R.id.rv_relive_details);
    rvRelive.setLayoutManager(new linearlayoutmanager(this, linearlayoutmanager.HORIZONTAL, false));
    adapterRelives = new ReliveAdapter();
    rvRelive.setAdapter(adapterRelives);

    if (getIntent() != null && getIntent().getParcelableExtra(Const.IntentData.D_RELIVE_LIST) != null) {
        adapterRelives.setData(((ReliveMainPojo) getIntent().getParcelableExtra(Const.IntentData.D_RELIVE_LIST)).relives);
    }
}

private void setVideosView() {

    rvVideos = (RecyclerView) findViewById(R.id.rv_videos);
    rvVideos.setLayoutManager(new linearlayoutmanager(this, linearlayoutmanager.VERTICAL, false));
    adapterVideos = new ChannelVideosAdapter();
    rvVideos.setAdapter(adapterVideos);

    if (getIntent() != null && getIntent().getParcelableExtra(Const.IntentData.D_VIDEOS_LIST) != null) {
        adapterVideos.setData(((MVideosForChannel) getIntent().getParcelableExtra(Const.IntentData.D_VIDEOS_LIST)).experience);
    }
}

Channeldetails adapter:

public final class ChannelVideosAdapter extends RecyclerView.Adapter<ChannelVideosAdapter.ViewHolder> {

private List<MVideo> data = new ArrayList<>();

public ChannelVideosAdapter() {
}

public void setData(List<MVideo> newData) {

    if (newData != null && !newData.isEmpty()) {

        data = newData;
        notifyDataSetChanged();
    }
}

public void clearData() {

    data.clear();
    notifyDataSetChanged();
}

@Override
public final ChannelVideosAdapter.ViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) {
    return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_video_recycle_tile, parent, false));
}

@Override
public final void onBindViewHolder(final ChannelVideosAdapter.ViewHolder holder, final int position) {

    final MVideo video = data.get(position);

    final String videoBackgroundImageUrl = video.asset.frame;
    final String videoName = video.name;

    ImageLoader.getInstance().displayImage(videoBackgroundImageUrl, holder.coverPhoto, new ImageLoadingListener() {
        @Override
        public void onl oadingStarted(String imageUri, View view) {
            holder.videoLoading.setVisibility(View.VISIBLE);
        }

        @Override
        public void onl oadingFailed(String imageUri, View view, FailReason failReason) {
            holder.videoLoading.setVisibility(View.GONE);
        }

        @Override
        public void onl oadingComplete(String imageUri, View view, Bitmap loadedImage) {
            holder.videoLoading.setVisibility(View.GONE);
        }

        @Override
        public void onl oadingCancelled(String imageUri, View view) {
            holder.videoLoading.setVisibility(View.GONE);
        }
    });

    holder.videoName.setText(videoName);
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            VideoPlayerActivity.StartNewVideoPlayerActivity((ChannelDetailsActivity) holder.itemView.getContext(), video, true);
        }
    });
}

@Override
public final int getItemCount() {
    return data.size();
}

final class ViewHolder extends RecyclerView.ViewHolder {

    private final ImageView coverPhoto;
    private final TextView videoName;
    private final ProgressBar videoLoading;

    ViewHolder(final View itemView) {
        super(itemView);

        coverPhoto = (ImageView) itemView.findViewById(R.id.img_thumbnail_background_video);
        videoName = (TextView) itemView.findViewById(R.id.txt_video_name);
        videoLoading = (ProgressBar) itemView.findViewById(R.id.pb_video_loading);
    }
}
}

Restart the adapter:

public final class ReliveAdapter extends RecyclerView.Adapter<ReliveAdapter.ViewHolder> {

private List<Relive> data = new ArrayList<>();

public ReliveAdapter() {
}

public void setData(List<Relive> newData) {

    if (newData != null && !newData.isEmpty()) {

        data = newData;
        notifyDataSetChanged();
    }
}

public void clearData() {

    data.clear();
    notifyDataSetChanged();
}

@Override
public final ReliveAdapter.ViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) {
    return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_relive_recycle_tile, parent, false));
}

@Override
public void onBindViewHolder(final ReliveAdapter.ViewHolder holder, final int position) {

    final Relive relive = data.get(position);

    final String reliveOwnerIconUrl = relive.owner.asset.large;
    final String reliveCoverPhotoUrl = relive.asset.stream.thumbnail;
    final String reliveDescription = relive.owner.name;

    ImageLoader.getInstance().displayImage(reliveCoverPhotoUrl, holder.backgroundImage, new ImageLoadingListener() {
        @Override
        public void onl oadingStarted(String imageUri, View view) {
            holder.imageLoading.setVisibility(View.VISIBLE);
        }

        @Override
        public void onl oadingFailed(String imageUri, View view, FailReason failReason) {
            holder.imageLoading.setVisibility(View.GONE);
        }

        @Override
        public void onl oadingComplete(String imageUri, View view, Bitmap loadedImage) {
            holder.imageLoading.setVisibility(View.GONE);

            ImageLoader.getInstance().displayImage(reliveOwnerIconUrl, holder.profilePicture, new ImageLoadingListener() {
                @Override
                public void onl oadingStarted(String imageUri, View view) {
                    holder.imageLoading.setVisibility(View.VISIBLE);
                }

                @Override
                public void onl oadingFailed(String imageUri, View view, FailReason failReason) {
                    holder.imageLoading.setVisibility(View.GONE);
                }

                @Override
                public void onl oadingComplete(String imageUri, View view, Bitmap loadedImage) {
                    holder.imageLoading.setVisibility(View.GONE);
                }

                @Override
                public void onl oadingCancelled(String imageUri, View view) {
                    holder.imageLoading.setVisibility(View.GONE);
                }
            });

            holder.eyeIcon.setImageResource(R.drawable.relive);
        }

        @Override
        public void onl oadingCancelled(String imageUri, View view) {
            holder.imageLoading.setVisibility(View.GONE);
        }
    });

    holder.reliveDescription.setText(reliveDescription);

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            RelivePlayerActivity.StartReliveReviewActivity((ChannelDetailsActivity) holder.itemView.getContext(), relive.asset.stream.url, relive.experienceGuid, relive.guid, holder.getAdapterPosition());
        }
    });
}

@Override
public final int getItemCount() {
    return data.size();
}

final class ViewHolder extends RecyclerView.ViewHolder {

    private final CircleImageView profilePicture;
    private final ImageView eyeIcon;
    private final ImageView backgroundImage;
    private final TextView reliveDescription;
    private final ProgressBar imageLoading;

    ViewHolder(View itemView) {
        super(itemView);

        profilePicture = (CircleImageView) itemView.findViewById(R.id.profile_circle_image);
        eyeIcon = (ImageView) itemView.findViewById(R.id.icon_circle_image);
        backgroundImage = (ImageView) itemView.findViewById(R.id.thumbnail_image);
        reliveDescription = (TextView) itemView.findViewById(R.id.description_textview);
        imageLoading = (ProgressBar) itemView.findViewById(R.id.image_loading);
    }
}

}

This is my layout:

activity_ channel_ details

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout      xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar_details"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:background="#017789"
    android:textAlignment="center">

    <TextView
        android:id="@+id/txt_toolbar_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textColor="@android:color/white"
        android:textStyle="bold" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end"
        android:layout_marginEnd="10dp"
        android:background="@color/white_trans"
        android:src="@drawable/zeality" />

</android.support.v7.widget.Toolbar>

<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff"
    android:orientation="vertical">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ffff"
        android:orientation="vertical">


        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#ffff"
            android:orientation="vertical">

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <ImageView
                    android:id="@+id/image_cover_details"
                    android:layout_width="match_parent"
                    android:layout_height="120dp"
                    android:adjustViewBounds="true"
                    android:scaleType="fitXY" />

                <FrameLayout
                    android:id="@+id/frame"
                    android:layout_width="100dp"
                    android:layout_height="110dp"
                    android:layout_centerInParent="true">

                    <co.zeality.vrplayer.views.HexagonImageView
                        android:id="@+id/img_hex"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentTop="true"
                        android:layout_centerHorizontal="true"
                        android:scaleType="fitXY" />

                </FrameLayout>

            </RelativeLayout>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp">

                <android.support.v7.widget.RecyclerView
                    android:id="@+id/rv_videos"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:nestedScrollingEnabled="false" />
            </RelativeLayout>

            <android.support.v7.widget.RecyclerView
                android:id="@+id/rv_relive_details"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

        </LinearLayout>
    </LinearLayout>

</android.support.v4.widget.NestedScrollView>

item_ video_ recycle_ tile

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout   xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">

<ImageView
    android:id="@+id/img_thumbnail_background_video"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:adjustViewBounds="true" />

<FrameLayout
    android:id="@+id/frame_image"
    android:layout_width="150dp"
    android:layout_height="100dp"
    android:layout_centerInParent="true">

    <ProgressBar
        android:id="@+id/pb_video_loading"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:foregroundGravity="center"
        android:visibility="gone" />

    <ImageView
        android:layout_width="80dp"
        android:layout_height="50dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginBottom="40dp"
        android:src="@drawable/glasses" />
</FrameLayout>

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentStart="true">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/img_play_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginStart="10dp"
            android:src="@drawable/play_no_circle" />

        <TextView
            android:id="@+id/txt_video_name"
            android:layout_width="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_height="match_parent"
            android:layout_below="@id/img_play_button"
            android:layout_marginStart="5dp"
            android:textColor="#FFF" />
    </RelativeLayout>
</FrameLayout>

<View
    android:layout_width="match_parent"
    android:layout_height="5dp"
    android:layout_alignParentBottom="true"
    android:background="#660c7582"></View>

resolvent:

You should use a recyclerview (vertical) as the parent object, return a view containing recyclerview (horizontal) when the adapter binds the view at position 1, and load other adapters for the recyclerview. Please refer to the figure for correct understanding

Main RecyclerView (vertical):   
    ---------------------------
    +   Item 1
    ---------------------------
    +   Second RecyclerView (Horizontal)
    ---------------------------
    +   Item 2
    ---------------------------

Parent recyclerview adapter code:

    @Override
        public int getItemViewType(int position) {

            if (position == 1)
                return 0;
            else 
                return 1;
        }
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        if (viewType == 0) {
            View v = LayoutInflater.from(context).inflate(R.layout.your_second_recylerView_layout, parent, false);
            return new ViewHolder1(v);
        }
        else{
            View v = LayoutInflater.from(context).inflate(R.layout.your_item_layout, parent, false);
            return new ViewHolder2(v);
        }

    }

Now you need to implement a second adapter for the horizontal recycleview

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>