Android网格视图根据数据更改列数
Android网格视图根据数据更改列数,android,gridview,android-adapter,android-gridview,Android,Gridview,Android Adapter,Android Gridview,我想像下图一样排列网格视图。您需要使用。然后可以使用动态设置列计数 gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { switch (adapter.getItemViewType(position)) { c
我想像下图一样排列网格视图。您需要使用。然后可以使用动态设置列计数
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
switch (adapter.getItemViewType(position)) {
case VIEW_TYPE_1:
return 1;
case VIEW_TYPE_2:
return 2;
default:
return -1;
}
}
});
您可以使用StaggedGridLayoutManager
private StaggeredGridLayoutManager gaggeredGridLayoutManager;
gaggeredGridLayoutManager = new StaggeredGridLayoutManager(2, 1);
recyclerView.setLayoutManager(gaggeredGridLayoutManager);
有关更多信息,请点击此链接
例如,看到这幅图你可以使用RecyclerView而不是GridView,然后像这样写
RecyclerView mRecyclerView=(RecyclerView)findViewById(R.id.card_recycler_view);
GridLayoutManager glm = new GridLayoutManager(getActivity(), 4);
glm.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
if (position % 3 == 2) {
return 4;
} else {
return 2;
}
}
});
mRecyclerView.setLayoutManager(glm);
您需要在回收器适配器中指定viewType
public class RVStatisticAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<Statistic> mList;
public RVStatisticAdapter(List<Statistic> list) {
this.mList = list;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view;
switch (viewType) {
case CITY_TYPE:
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.statistic_row_one, parent, false);
return new CityViewHolder(view);
case EVENT_TYPE:
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.statistic_row_two, parent, false);
return new EventViewHolder(view);
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
Statistic object = mList.get(position);
if (object != null) {
switch (object.getType()) {
case CITY_TYPE:
((CityViewHolder) holder).mTitle.setText(object.getTitle());
((CityViewHolder) holder).no.setText(object.getNo());
((CityViewHolder) holder).playerone.setText(object.getPlayer_one());
break;
case EVENT_TYPE:
((EventViewHolder) holder).mTitle.setText(object.getTitle());
((EventViewHolder) holder).no.setText(object.getNo());
((EventViewHolder) holder).playerone.setText(object.getName());
((EventViewHolder) holder).playertwo.setText(object.getPlayer_two());
break;
}
}
}
@Override
public int getItemCount() {
if (mList == null)
return 0;
return mList.size();
}
@Override
public int getItemViewType(int position) {
if (mList != null) {
Statistic object = mList.get(position);
if (object != null) {
return object.getType();
}
}
return 0;
}
public static class CityViewHolder extends RecyclerView.ViewHolder {
private TextView mTitle,no,playerone;
public CityViewHolder(View itemView) {
super(itemView);
mTitle = (TextView) itemView.findViewById(R.id.tv_title);
no = (TextView) itemView.findViewById(R.id.tv_no);
playerone = (TextView) itemView.findViewById(R.id.tv_player_one);
}
}
public static class EventViewHolder extends RecyclerView.ViewHolder {
private TextView mTitle,no,playerone,playertwo;
public EventViewHolder(View itemView) {
super(itemView);
mTitle = (TextView) itemView.findViewById(R.id.tv_title);
no = (TextView) itemView.findViewById(R.id.tv_no);
playerone = (TextView) itemView.findViewById(R.id.tv_player_one);
playertwo = (TextView) itemView.findViewById(R.id.tv_player_two);
}
}
}
公共类RVStatisticaAdapter扩展了RecyclerView.Adapter{
私人名单;
公共RVStatisticadAdapter(列表){
this.mList=列表;
}
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图;
开关(视图类型){
案例城市类型:
view=LayoutInflater.from(parent.getContext()).flate(R.layout.statistic\u row\u one,parent,false);
返回新的CityViewHolder(视图);
案例事件类型:
view=LayoutInflater.from(parent.getContext()).flate(R.layout.statistic\u row\u two,parent,false);
返回新的EventViewHolder(视图);
}
返回null;
}
@凌驾
BindViewHolder上的公共无效(RecyclerView.ViewHolder,int位置){
统计对象=mList.get(位置);
if(对象!=null){
开关(object.getType()){
案例城市类型:
((CityViewHolder)holder.mTitle.setText(object.getTitle());
((CityViewHolder)holder.no.setText(object.getNo());
((CityViewHolder)holder.playerne.setText(object.getPlayer_one());
打破
案例事件类型:
((EventViewHolder)holder.mTitle.setText(object.getTitle());
((EventViewHolder)holder.no.setText(object.getNo());
((EventViewHolder)holder.playerne.setText(object.getName());
((EventViewHolder)holder.playertwo.setText(object.getPlayer_two());
打破
}
}
}
@凌驾
public int getItemCount(){
if(mList==null)
返回0;
返回mList.size();
}
@凌驾
public int getItemViewType(int位置){
如果(mList!=null){
统计对象=mList.get(位置);
if(对象!=null){
返回object.getType();
}
}
返回0;
}
公共静态类CityViewHolder扩展了RecyclerView.ViewHolder{
私有文本视图mTitle,否,playerone;
公共城市视图文件夹(视图项视图){
超级(项目视图);
mTitle=(TextView)itemView.findViewById(R.id.tv_title);
no=(TextView)itemView.findViewById(R.id.tv_no);
playerne=(TextView)itemView.findViewById(R.id.tv\u player\u one);
}
}
公共静态类EventViewHolder扩展了RecyclerView.ViewHolder{
私有文本视图mTitle,否,playerone,playertwo;
公共事件视图持有者(视图项视图){
超级(项目视图);
mTitle=(TextView)itemView.findViewById(R.id.tv_title);
no=(TextView)itemView.findViewById(R.id.tv_no);
playerne=(TextView)itemView.findViewById(R.id.tv\u player\u one);
playertwo=(TextView)itemView.findViewById(R.id.tv\u player\u two);
}
}
}
这个可以用。试试这个
RecyclerView RecyclerView=RecyclerView)findViewById(R.id.card_recycler_view);
GridLayoutManager glm = new GridLayoutManager(getActivity(), 4);
glm.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
switch(position%3) {
case 0:
return 4;
break;
case 1:
return 2;
break;
case 2:
return 2;
break;
}
}
});
mRecyclerView.setLayoutManager(glm);
我想安排网格视图,如下图所示,这是我必须传递的动态数据,在第一行中,两个项目将放置,第二个项目一个位置将再次放置第三行和第四行,我将继续,我如何处理,请帮助我..您需要使用Recyclerview进行第一次返回2,否则条件返回4。