【发布时间】:2015-10-27 00:07:15
【问题描述】:
请查看相关Question。我从 cmets 那里得到了一些提示,现在用一种新的方式来表达它。
我正在使用带有StaggeredGridView 适配器的RecyclerView 来显示数据。我如何知道当前设备需要加载多少项目才能适应整个屏幕?
进程
- 确定屏幕尺寸
- 确定需要加载多少项目以适应全屏
- 从服务器获取包含项目数的数据
- 显示它们
- 当用户向下滚动设备时,获取相同数量的项目等等。
问题
我无法理解如何完成前两点。
适配器代码
public class StaggeredGridAdapter extends RecyclerView.Adapter<StaggeredGridAdapter.StaggeredGridView> {
private Context context;
private String INTENT_VALUE = "warehouse";
private List<Warehouse> warehouses = new ArrayList<Warehouse>();
private AppDelegate app;
int size;
public StaggeredGridAdapter(Context context) {
this.context = context;
app = (AppDelegate) context;
}
public void addItems(List<Warehouse> response) {
size = response.size();
warehouses = response;
}
@Override
public StaggeredGridView onCreateViewHolder(ViewGroup parent, int viewType) {
View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.grid_item, parent, false);
StaggeredGridView staggeredGridView = new StaggeredGridView(layoutView);
return staggeredGridView;
}
@Override
public void onBindViewHolder(StaggeredGridView holder, int position) {
holder.textView.setText(warehouses.get(position).getFace());
}
@Override
public int getItemCount() {
return size;
}
class StaggeredGridView extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView textView;
public StaggeredGridView(View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(R.id.img_name);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent = new Intent(context, WareHouseDetailActivity.class);
intent.putExtra(INTENT_VALUE, warehouses.get(getAdapterPosition()));
v.getContext().startActivity(intent);
}
}
}
向适配器填充数据的代码
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);
【问题讨论】:
-
您是否主要关心知道何时从服务器加载更多项目?
-
看看WindowManager,这是您确定屏幕大小的第一个停靠点。
-
@ElliotM 实际上不是,因为它是第一个活动。我只想知道我需要从服务器获取多少项目,因为每个请求只返回 10 个项目
-
@t0mm13b 知道了,但是有什么方法可以确定项目的数量吗?
-
@Def 你知道数据是如何在适配器中呈现的,即。一个项目的高度/宽度,然后将视图的客户端高度除以呈现项目的高度?
标签: java android android-layout android-recyclerview