我需要一个设计来实现像View上的Top图像,底部有一个带有两个coloumns的GridView
。所以我打算使用RecyclerView
来实现它。首先,我需要使用LinearLayoutManager
和底部GridLayoutManager
。那么如何使用这两个值创建Recycler Adapter。
答案 0 :(得分:14)
假设您知道如何使用多种视图类型创建RecyclerView适配器,这就是您为recyclerview指定布局管理器的方式
mAdapter = new MyMultiViewAdapter(); // an imaginary adapter that supports multiple view types
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
GridLayoutManager glm = new GridLayoutManager(this, 2);
glm.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
switch(mAdapter.getItemViewType(position)){
case MyAdapter.TYPE_HEADER:
return 2;
case MyAdapter.TYPE_ITEM:
return 1;
default:
return -1;
}
}
});
mRecyclerView.setLayoutManager(glm);
mRecyclerView.setAdapter(mAdapter);
答案 1 :(得分:3)
RecyclerView
需要一个布局管理器。因此,要实现您的需求,您可以使用GridLayoutManager
。
跨度大小将设置为2,以获得两列。然后,您将使用setSpanSizeLookup
将第一个项目标记为跨越两列。在这个视图中,你会把你的"顶部图像"。
public boolean isHeader(int position) {
return position == 0;
}
GridLayoutManager manager = new GridLayoutManager(this, 2);
manager.setSpanSizeLookup(new SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return isHeader(position) ? 2 : 1;
}
});
recyclerView.setLayoutManager(manager);
然后,onCreateViewHolder
可以根据该位置的项目类型返回不同的视图持有者。
@Override
public int getItemViewType(int position) {
return isHeader(position) ? VIEW_TYPE_HEADER : VIEW_TYPE_ITEM;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == VIEW_TYPE_HEADER) {
// Setup header view holder
return new HeaderViewHolder(...);
}
// Setup item view holder
return new ItemViewHolder(...)
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if (isHeader(position)) {
return;
}
// Bind item to the item view holder
}
希望这有帮助!