【发布时间】:2018-11-03 04:01:28
【问题描述】:
屏幕 1:GridView
屏幕 2:详细信息页面
任务完成:
1) 从服务器加载gridview中的所有视频。
2) 用户点击gridview item的任意位置。
3) 打开并播放特定视频的详细屏幕。
4) 在垂直滚动时播放下一个或上一个视频。
当前实施:
GridFragment {
ArrayList<VideoPostModel> videoPostList;
RecyclerView gridView;
onnItemClick() {
Intent intent = new Intent(this, DetailActivity.class);
intent.putExtra("data", videoPostList);
intent.putExtra("click_index", clickedIndex);
intent.putExtra("pagination_index", paginationIndex);
startActivity(intent);
}
}
DetailActivity {
VerticlaViewPager vertiCalViewPager;
ArrayList<VideoPostModel> videoPostList;
onCreate() {
videoPostList = getIntent().getParcelableArrayListExtra("data");
clickedIndex = getIntent().getIntExtra("clickindex", 0);
paginationIndex = getIntent().getIntExtra("pagination_index", 0);
VideoFragmentStatePagerAdapter viewPagerAdapter = new VideoFragmentStatePagerAdapter(videoPostList);
vertiCalViewPager.setAdapter(viewPagerAdapter);
}
}
问题:
如果 videoPostList 在将数据从片段传递到活动时有更多数据(大约 100 多个 VideoPostModel 对象),则应用程序崩溃,因为有意图发送数据的限制(https://stackoverflow.com/a/37054839/3598052)。
Hacky Alternatives:
1) 静态数组列表
2) 应用类中的数组列表
寻找实现上述功能的最佳和高效解决方案。
任何有助于实现这一目标的建议、参考链接或代码将不胜感激,并提前致谢。
更新 1:
我发现的另一个解决方案是使用枚举传递数据,但根据 cmets,我不确定它的性能。参考:https://stackoverflow.com/a/14706456/3598052
【问题讨论】:
-
尝试加载前 50 个视频,然后在后台加载服务中的数据。?
-
有一个名为 eventbus 的库可以帮助您解决这个问题。 github.com/greenrobot/EventBus
-
使用这个类 [gist.github.com/nesquena/d09dc68ff07e845cc622]。在你的情况下设置 visibleThreshold = 50.
-
@Chitrang 你能把 VerticalViewPager 的代码传过来吗?
-
@droidev 请务必点击此链接stackoverflow.com/a/54896137/3598052。 android 也发布了 ViewPager2,你可能要考虑一下。
标签: android android-layout android-fragments android-intent android-viewpager