请查看相关的Question。我从评论中得到了一些暗示,现在又用一种新的方式。
我正在使用RecyclerView
和StaggeredGridView
适配器来显示数据。如何知道当前设备需要加载多少项才能适合整个屏幕?
我无法理解如何完成前两点。
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);
答案 0 :(得分:1)
要找到高度和宽度,您可以使用DisplayMetrics
。
final DisplayMetrics displayMetrics = this.getApplicationContext().getResources().getDisplayMetrics();
此displayMetrics
将提供高度,宽度和密度。使用单View
(或行)的高度和总高度来计算项目数。
为什么您需要Exact
个项目,如果是您正在进行的服务器调用,您可以根据设备大小粗略估计项目数量。另外,我认为最好保持the number of items sent by server
不变并且不依赖于设备高度。如果您收到的项目数量超过了您可以放入屏幕的项目数量,那么用户可以滚动查看它们。
答案 1 :(得分:0)
您可以将其设置为在您接近列表末尾时自动加载更多内容,而不是尝试确定您需要加载多少内容。
考虑这种方法:
@Override
public void onBindViewHolder(StaggeredGridView holder, int position) {
holder.textView.setText(warehouses.get(position).getFace());
}
当项目准备好在屏幕上显示时调用。通过执行if(position > getItemCount() - 5{ // load more }
之类的操作,您可以在需要时自动加载更多内容。