我正在开发一个显示游戏列表的应用程序,在每个游戏的 itemView 内,我还有一个要显示的视频列表。预览和结构如下。
我部署了一个RecyclerView作为窗口根视图,然后对于视频,我使用网格样式的RecyclerView来显示,所以这里我们得到了一个嵌套的RecyclerView结构。
但是有一个问题,因为游戏之间的视频数量不一致,我不希望视频列表的RecyclerView能够滚动,所以最好的方法是让View的高度动态拉伸取决于它有多少行。我听到一个令人失望的结论,说没有办法通过互联网来实现这一点。真的是这样吗?有什么替代方法可以做到这一点吗?
到目前为止,关于这个问题,我还没有想法解决它,所以我手动更改 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();
...
}
}
即使我做了这个努力,我仍然注意到正在执行的 onCreateViewHolder 方法以及在我循环滑动根 RecyclerView 期间膨胀计数器不断增加。
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 的,也将不胜感激,提前致谢。