仿新浪个人信息页布局

 最近项目中需要一个类似微博个人信息页的布局,网上找了一些资料但都不符合自己的需求,故自己实现一个。

一.模仿布局样式原型:

这里写图片描述

 上图是新浪微博个人信息页的整体布局,可以看到整个布局是一个可以滚动列表结构,上边是一个个人信息布局和一个tab选择栏布局,看到这个布局之后我们可以想到用scrollview+listview来完成,但由于使用这种嵌套方式之后需重写listview高度而导致item无法复用,故我们使用另一种方式来完成,也就是RecyclerView充当整个布局的方式,个人信息布局和tab选择栏作为header插入到列表中。
 下边来让我们思考一下即将实现布局将会遇到的问题:
1.RecyclerView如何加header和footer进去?
2.怎样做到悬浮tab栏效果?
3.怎么在同一个列表中加载不同的样式?
4.如何在点tab栏切换数据的时候保持列表处于上一次的位置?

问题一:RecyclerView如何加header和footer进去?

  我们都知道RecylerView不像Listview一样有addheaderview和addfooterview两个方法,既然没有这两个方法我们就需要自己去写这两个方法并且去实现了,我们知道RecyclerView的adapter中有一个叫getItemViewType(int position)的方法,我们可以通过重写这个方法来让RecyclerView的item根据条件不同加载不同种类的布局,那我们便可以通过重写这个方法将header和footer作为item项加入到RecyclerView中从而达到加header和footer的效果。适配器的代码如下:

package com.ifeng.art.common.widget.recyclerview;

import android.content.Context;
import android.support.v4.util.SparseArrayCompat;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;
import java.util.List;


/**
 * Created by lvzishen on 16/10/8.
 */
public abstract class WrapperRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
   

    protected List list = new ArrayList<>();
    protected Context context;
//    /**
//     * 头布局
//     */
//    private View headView;
//    /**
//     * 头布局Tab
//     */
//    private View headViewTab;
    /**
     * 头布局
     * key: Integer; value: object
     */
    private SparseArrayCompat<View> mHeaderViews = new SparseArrayCompat<>();
    /**
     * 头布局Tab
     */
    private View headViewTab;
    /**
     * 脚布局
     */
    private FooterView footView;

//    /**
//     * 头布局数量
//     */
//    public int headViewCount = 0;
    /**
     * 脚布局数量
     */
    public int footViewCount = 0;

    public int getFootViewCount() {
        return footViewCount;
    }

    private static final int TYPE_HEADER = 1;
    private static final int TYPE_FOOTER = 3;


    private FootViewHolder footViewHolder;

    public void setList(List listData) {
        this.list.clear();
        this.list.addAll(listData);
        this.notifyDataSetChanged();
    }

    public WrapperRecyclerAdapter(Context context) {
        this.context = context;
    }


    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (mHeaderViews.get(viewType) != null) {
            return new HeadViewHolder(mHeaderViews.get(viewType));
        }
        else
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值