在 10 个项目之后插入一个 Gridview 行
Inserting a Gridview Row after 10 items
我不知道如何实现。我想在 GridView 项目的第 10 个位置之后插入一行。我不知道从哪里开始。
谢谢,请多多指教
如果将 RecyclerView
与 GridLayoutManager
一起使用,则可以使用 setSpanSizeLookup
你需要 adapter
和 multiviewtype
mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
switch(adapter.getItemViewType(position)){
case adapter.TYPE_ROW:
return 2;
case adapter.TYPE_COLUMN:
return 1;
}
}
});
第一步:定义两个布局项,一个用于列,另一个用于行
第 2 步: 创建回收器视图适配器,并覆盖以下方法
@Override
public int getItemViewType(int position) {
int viewType;
if ((position + 1) % 10 == 0) {
viewType = VIEW_TYPE_ROW;
} else {
viewType = VIEW_TYPE_COLUMN;
}
return viewType;
}
@Override
public long getItemId(int position) {
/**
* Optimization of notifyDataSetChanged
* Look at documentation for setHasStableIds(true) and getItemId(int position)
*/
return STABLE_ID + position;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case VIEW_TYPE_COLUMN:
// inflate coloumn layout and view holder
break;
case VIEW_TYPE_ROW:
// inflate row layout and view holder
break;
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
switch (getItemViewType(position)) {
case VIEW_TYPE_COLUMN:
break;
case VIEW_TYPE_ROW:
break;
}
}
在初始化适配器时执行如下操作
final GridLayoutManager layoutManager = new GridLayoutManager(getActivity().getApplicationContext(), 2);
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
switch (themeAdapter.getItemViewType(position)) {
case ThemeAdapter.VIEW_TYPE_COLUMN:
return 1;
case ThemeAdapter.VIEW_TYPE_ROW:
return layoutManager.getSpanCount();
default:
return layoutManager.getSpanCount();
}
}
});
这里的 themeAdapter 是你的 RecyclerView 适配器。
我不知道如何实现。我想在 GridView 项目的第 10 个位置之后插入一行。我不知道从哪里开始。
谢谢,请多多指教
如果将 RecyclerView
与 GridLayoutManager
一起使用,则可以使用 setSpanSizeLookup
你需要 adapter
和 multiviewtype
mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
switch(adapter.getItemViewType(position)){
case adapter.TYPE_ROW:
return 2;
case adapter.TYPE_COLUMN:
return 1;
}
}
});
第一步:定义两个布局项,一个用于列,另一个用于行
第 2 步: 创建回收器视图适配器,并覆盖以下方法
@Override
public int getItemViewType(int position) {
int viewType;
if ((position + 1) % 10 == 0) {
viewType = VIEW_TYPE_ROW;
} else {
viewType = VIEW_TYPE_COLUMN;
}
return viewType;
}
@Override
public long getItemId(int position) {
/**
* Optimization of notifyDataSetChanged
* Look at documentation for setHasStableIds(true) and getItemId(int position)
*/
return STABLE_ID + position;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case VIEW_TYPE_COLUMN:
// inflate coloumn layout and view holder
break;
case VIEW_TYPE_ROW:
// inflate row layout and view holder
break;
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
switch (getItemViewType(position)) {
case VIEW_TYPE_COLUMN:
break;
case VIEW_TYPE_ROW:
break;
}
}
在初始化适配器时执行如下操作
final GridLayoutManager layoutManager = new GridLayoutManager(getActivity().getApplicationContext(), 2);
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
switch (themeAdapter.getItemViewType(position)) {
case ThemeAdapter.VIEW_TYPE_COLUMN:
return 1;
case ThemeAdapter.VIEW_TYPE_ROW:
return layoutManager.getSpanCount();
default:
return layoutManager.getSpanCount();
}
}
});
这里的 themeAdapter 是你的 RecyclerView 适配器。