android gridview添加标题,android gridview布局添加多個title

在項目中要求實現在gridview的布局效果上添加title,並且是多個在不同地方的title,每個title占據一整行,下面分享一下如何實現

先上效果圖:

f5b20b341bdeb7c825e4aeba1739bd89.png

1.首先添加title到list集合中:List ls;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

RecyclerView rl = (RecyclerView) findViewById(R.id.myrv);

final GridLayoutManager manager = new GridLayoutManager(this,2);

rl.setLayoutManager(manager);

ls = new ArrayList<>();

for(int i = 0 ; i< 100 ; i ++){

ls.add(i + "");

}

MyAdapter myAdapter = new MyAdapter();

myAdapter.addTitle(7,"呵呵噠");

myAdapter.addTitle(11,"萌萌噠");

myAdapter.addTitle(20,"餓餓噠");

rl.setAdapter(myAdapter);

}

2.在recyclerview復寫的oncreateviewholder判斷類型,是否是title,是的話就創建title的自定義viewpublic SparseArray titles = new SparseArray<>();

@Override

public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

if(isTitle(viewType)){

View v = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_title,parent,false);

TitleViewHolder titleViewHolder = new TitleViewHolder(v);

return titleViewHolder;

}else{

View v = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_test,parent,false);

MyViewHolder myViewHolder = new MyViewHolder(v);

return myViewHolder;

}

}

3.復寫adapter中的getviewtype方法@Override

public int getItemViewType(int position) {

if(isTitle(position)){

return position;

}

return super.getItemViewType(position);

}

4.復寫onbindviewholder,對不同類型的view進行綁定數據操作@Override

public void onBindViewHolder(RecyclerView.ViewHolder holder,int position) {

if(isTitle(position)){

TitleViewHolder titleViewHolder = (TitleViewHolder) holder;

titleViewHolder.tv.setText(titles.get(position));

return;

}

//獲取空過去的item(關鍵)

for(int i = 0; i < titles.size(); i++){

int key = titles.keyAt(i);

if(position > titles.keyAt(titles.size() - 1)){

position -= titles.size();

break;

}else if(position > key && position < titles.keyAt(i + 1)){

position -= (i+1);

break;

}

}

final int s = position;

MyViewHolder myViewHolder = (MyViewHolder) holder;

myViewHolder.tv.setText(ls.get(s));

myViewHolder.tv.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

Toast.makeText(MainActivity.this,"您點擊了" + s,Toast.LENGTH_SHORT).show();

}

});

}

5.復寫getitemcount方法重新負值item數量public int getItemCount() {

return (ls.size() + titles.size());

}

6.添加兩個方法用於判斷是否是title,和添加title方法public boolean isTitle(int position){

return titles.get(position) == null ? false:true;

}

public void addTitle(int position,String title){

titles.put(position,title);

}

7.重點,對title類型進行分配兩個單元格處理@Override

public void onAttachedToRecyclerView(RecyclerView recyclerView) {

//如果是title就占據2個單元格(重點)

GridLayoutManager manager = (GridLayoutManager) recyclerView.getLayoutManager();

manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {

@Override

public int getSpanSize(int position) {

if(isTitle(position)){

return 2;

}

return 1;

}

});

}

到此為止就完成了一個可以任意添加title的recyclerview

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值