所以我的想法是,我有通道的垂直回收视图,在通道的第二个位置,我应该有一个水平的回收视图和重温。
我不确定我应该如何做到这一点,我尝试弄乱观众并猜测我应该在我的channel_details布局中只制作一个recyclerview,另一个作为item_channel_details中的项目,但是我不能让它工作。
这是我的代码。
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适配器:
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 onLoadingStarted(String imageUri, View view) {
holder.videoLoading.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
holder.videoLoading.setVisibility(View.GONE);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
holder.videoLoading.setVisibility(View.GONE);
}
@Override
public void onLoadingCancelled(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);
}
}
}
Relive 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 onLoadingStarted(String imageUri, View view) {
holder.imageLoading.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
holder.imageLoading.setVisibility(View.GONE);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
holder.imageLoading.setVisibility(View.GONE);
ImageLoader.getInstance().displayImage(reliveOwnerIconUrl, holder.profilePicture, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
holder.imageLoading.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
holder.imageLoading.setVisibility(View.GONE);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
holder.imageLoading.setVisibility(View.GONE);
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
holder.imageLoading.setVisibility(View.GONE);
}
});
holder.eyeIcon.setImageResource(R.drawable.relive);
}
@Override
public void onLoadingCancelled(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);
}
}
}
这是我的布局:
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>
答案 0 :(得分:3)
您应该使用一个recyclerView(垂直)作为父级,并且在位置1的适配器中的绑定视图时,您将返回一个包含recyclerView(水平)的视图,并为该recyclerView加载其他适配器。请参考图表以便正确理解。
Main RecyclerView (vertical):
---------------------------
+ Item 1
---------------------------
+ Second RecyclerView (Horizontal)
---------------------------
+ Item 2
---------------------------
父级RecyclerView适配器代码:
@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);
}
}
现在你需要为水平循环视图实现第二个适配器。