如何根据设备屏幕大小使用RecyclerView?

时间:2015-10-26 12:34:16

标签: android android-layout android-activity android-recyclerview android-screen-support

我有一个后端API端点,在某些集合中返回JSON。每组包含10 lines of Json

例如:  curl http://www.something.com?getData=0first 10 elementscurl http://www.something.com?getData=1将返回下一组,依此类推。

我正在使用RecyclerViewStaggeredGridView来加载来自给定endpoints的数据。现在我只拿第一套,它的工作非常好。

我在找什么?

如何根据RecyclerView中的屏幕尺寸在Android中加载数据。例如:

假设设备hdpi能够在staggeredGridView中加载25 RecyclerView。所以,这里是endpoints请求的顺序:

http://www.something.com?getData=0    // will fetch 0-10
http://www.something.com?getData=10   // will fetch 11-20
http://www.something.com?getData=10&skip=5 // will fetch 21-25

如何动态制作上述流程。这样它适用于所有屏幕尺寸?

BTW这就是我将数据加载到StaggeredGridView适配器的方式:

 mRecyclerView = (RecyclerView) mActivity.findViewById(R.id.staggering_grid);
 mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
 mAdapter = new StaggeredGridAdapter(mContext);
 mAdapter.addItems(response);
 mRecyclerView.setAdapter(mAdapter);

可能的解决方案

  • 如果我知道我需要根据设备填写多少Grid,那么我可以简单地提出请求,直到我得到数据来填充预期的数字。
  • 我还可以使用Event BusRetrofit发送通知,以便在设备屏幕填满之前再次拨打电话。

这是好方法吗?如果是,那么我该如何实现呢?

1 个答案:

答案 0 :(得分:1)

你能做的就是一次加载数据超过50,而不是10,这样你就有足够的数据来填充整个显示,如果你的api只允许每个请求获得10个项目,那么你会发出多个请求从不同的线程中将它们添加到适配器,并在所有请求成功完成后刷新视图。因此,这样您就不需要请求所有项目并且有足够的项目可以在任何设备屏幕设置中显示