我正在开发一个展示游戏列表的应用程序,在每个游戏的itemView中,我还有一个视频列表需要显示。这里是预览和结构。
我使用RecyclerView作为窗口根视图,然后对于视频,我使用了网格样式的RecyclerView来显示,所以我们得到了嵌套的RecyclerView结构。但是,由于视频数量在游戏之间不一致,我不希望视频列表的RecyclerView可以滚动,所以最好的方法是使视图的高度根据它有多少行而动态拉伸。我从互联网上听到了令人失望的结论,说没有办法实现这一点。真的吗?有什么替代方案吗?
到目前为止,我���没有想到解决这个问题的方法,所以我手动更改了RecyclerView的高度作为临时解决方案。
即使我已经尽力了,但我还是注意到在我循环滑动根RecyclerView时,onCreateViewHolder方法被执行并且inflate计数器也在增加。
这个想法是否可行?还是我做错了?我想实现这种效果,如果有其他建议,即使不涉及RecyclerView,也会受到赞赏。谢谢提前。
我使用RecyclerView作为窗口根视图,然后对于视频,我使用了网格样式的RecyclerView来显示,所以我们得到了嵌套的RecyclerView结构。但是,由于视频数量在游戏之间不一致,我不希望视频列表的RecyclerView可以滚动,所以最好的方法是使视图的高度根据它有多少行而动态拉伸。我从互联网上听到了令人失望的结论,说没有办法实现这一点。真的吗?有什么替代方案吗?
到目前为止,我���没有想到解决这个问题的方法,所以我手动更改了RecyclerView的高度作为临时解决方案。
videoGridRecyclerView.getLayoutParams().height = rowCount * 242;
考虑到视频项的结构完全相同,如果这些RecyclerView在屏幕上滑动后可以重复使用该视频的itemView,那将会带来更好的性能提升。
因此,我尝试使用特定的RecycledViewPool来向每个嵌套的RecyclerView进行传递。
public class MainActivity extends Activity {
private RecyclerView.RecycledViewPool mViewPool;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// create the RecycledViewPool from first and re-use for each nested RecyclerViews.
mViewPool = new RecyclerView.RecycledViewPool();
...
}
}
即使我已经尽力了,但我还是注意到在我循环滑动根RecyclerView时,onCreateViewHolder方法被执行并且inflate计数器也在增加。
private static class VideoAdapter extends RecyclerView.Adapter<GridViewHolder> {
private List<Video> mVideoList;
private VideoAdapter(List<Video> videoList) {
mVideoList = videoList;
}
// this method would always invoke during i swipe the RecyclerView.
@Override
public GridViewHolder onCreateViewHolder(ViewGroup container, int viewType) {
Log.e("", String.format("createViewCount : %d", ++MainActivity.STAT_GAME_VIDEO_ITEM_COUNT));
return new GridViewHolder(inflate(container, R.layout.game_video_item)) {};
}
}
这个想法是否可行?还是我做错了?我想实现这种效果,如果有其他建议,即使不涉及RecyclerView,也会受到赞赏。谢谢提前。