RecyclerView吸顶效果

1.导入依赖
androidTestCompile(‘com.android.support.test.espresso:espresso-core:2.2.2’, {
exclude group: ‘com.android.support’, module: ‘support-annotations’
})
2.adapter适配器
public class StickyExampleAdapter extends RecyclerView.Adapter<StickyExampleAdapter.RecyclerViewHolder> {
//第一个吸顶
private static final int FIRST_STICKY_VIEW = 1;
//别的吸顶
public static final int HAS_STICKY_VIEW = 2;
//正常View
public static final int NONE_STICKY_VIEW = 3;
private final LayoutInflater mInflate;
private final List datas;

public StickyExampleAdapter(Context context, List<NewsBean> datas) {
    mInflate = LayoutInflater.from(context);
    this.datas = datas;
}

@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View inflate = mInflate.inflate(R.layout.item_ui, parent, false);
    return new RecyclerViewHolder(inflate);
}

@Override
public void onBindViewHolder(RecyclerViewHolder holder, int position) {
    NewsBean stickyBean = datas.get(position);
    holder.tvName.setText(stickyBean.name);
    holder.tvGender.setText(stickyBean.autor);


    if (position == 0) {
        holder.tvStickyHeader.setVisibility(View.VISIBLE);
        holder.tvStickyHeader.setText(stickyBean.sticky);
        holder.itemView.setTag(FIRST_STICKY_VIEW);
    } else {
        if (!TextUtils.equals(stickyBean.sticky, datas.get(position - 1).sticky)) {
            holder.tvStickyHeader.setVisibility(View.VISIBLE);
            holder.tvStickyHeader.setText(stickyBean.sticky);
            holder.itemView.setTag(HAS_STICKY_VIEW);
        } else {
            holder.tvStickyHeader.setVisibility(View.GONE);
            holder.itemView.setTag(NONE_STICKY_VIEW);
        }
    }
    //通过此处设置ContentDescription,作为内容描述,可以通过getContentDescription取出,功效跟setTag差不多。
    holder.itemView.setContentDescription(stickyBean.sticky);
}

@Override
public int getItemCount() {
    return datas == null ? 0 : datas.size();
}

public class RecyclerViewHolder extends RecyclerView.ViewHolder {
    TextView tvStickyHeader;
    RelativeLayout rlContentWrapper;
    TextView tvName;
    TextView tvGender;
    ImageView imgs;

    RecyclerViewHolder(View itemView) {
        super(itemView);
        tvStickyHeader = (TextView) itemView.findViewById(R.id.tv_sticky_header_view);
        rlContentWrapper = (RelativeLayout) itemView.findViewById(R.id.rl_content_wrapper);
        tvName = (TextView) itemView.findViewById(R.id.name);
        tvGender = (TextView) itemView.findViewById(R.id.auto);
        imgs = itemView.findViewById(R.id.imags);
    }
}

}

3.MainActivity
public class MainActivity extends AppCompatActivity implements IView {

@BindView(R.id.recy)
RecyclerView recy;
@BindView(R.id.tv_sticky_header_view)
TextView tvStickyHeaderView;//吸顶文本1
private PresenterImpls presenterImpls;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);
    presenterImpls = new PresenterImpls(this);
    Map<String, Object> map = new HashMap<>();
    map.put("uid", "71");
    presenterImpls.startRequest(Contacts.DATA_URL, map, MyData.class);
    initListener();

}

//初始化Listener
private void initListener() {
    recy.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            View stickview = recyclerView.findChildViewUnder(0, 0);
            if (stickview != null && stickview.getContentDescription() != null) {
                if (!TextUtils.equals(tvStickyHeaderView.getText(), stickview.getContentDescription())) {
                    tvStickyHeaderView.setText(stickview.getContentDescription());
                }
            }
            View transInfoView = recyclerView.findChildViewUnder(
                    0, tvStickyHeaderView.getHeight() + 1);
            if (transInfoView.getTag() != null) {

                int transViewStatus = (int) transInfoView.getTag();
                int top = transInfoView.getTop();

                if (transViewStatus == StickyExampleAdapter.HAS_STICKY_VIEW) {
                    if (top > 0) {
                        int dealtY = top - tvStickyHeaderView.getMeasuredHeight();
                        tvStickyHeaderView.setTranslationY(dealtY);
                    } else {
                        tvStickyHeaderView.setTranslationY(0);
                    }
                } else if (transViewStatus == StickyExampleAdapter.NONE_STICKY_VIEW) {
                    tvStickyHeaderView.setTranslationY(0);
                }
            }
        }
    });
}

public void getData(List<MyData.DataBean> newsData) {
    List<NewsBean> stickyExampleModels = new ArrayList<>();
    for (int i = 0; i < newsData.size(); i++) {
        for (int j = 0; j <newsData.get(i).getSpus().size() ; j++) {
            if (i < newsData.get(i).getSpus().size()) {
                stickyExampleModels.add(new NewsBean(
                        newsData.get(i).getName(), "--" + newsData.get(i).getSpus().get(j).getName(), "价格" + newsData.get(i).getSpus().get(j).getPraise_num()));
            }
        }

    }
    recy.setLayoutManager(new LinearLayoutManager(this));
    recy.setAdapter(new StickyExampleAdapter(this, stickyExampleModels));
}

@Override
public void success(Object success) {
    MyData news = (MyData) success;
    List<MyData.DataBean> newsData = news.getData();
    getData(newsData);
}

@Override
public void error(Object error) {

}

}
4.标记bean类
public class NewsBean {
public String name;
public String autor;
public String sticky;

public NewsBean(String sticky, String name, String autor) {
    this.sticky = sticky;
    this.name = name;
    this.autor = autor;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值