RecyclerView添加Header(头布局)+无限轮播

原创 2016年06月01日 17:08:51

Demo下载地址:http://download.csdn.net/detail/u013091087/9538055
参考的项目地址:http://www.eoeandroid.com/thread-918398-1-1.html?_dsign=afb0ddb9
这里写图片描述
无限轮播:
主要是PagerAdapter的getCount,instantiateItem和destroyItem三个方法上处理就好,另外写一个计时器给viewpager定时切换即可。
pageradapter:

import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import java.util.List;

/**
 * Created by Coffee on 2016/5/28 0028.
 */
public class AdvertisePagerViewAdapter extends PagerAdapter {

    private List<ImageView> adver_images;

    public AdvertisePagerViewAdapter(List<ImageView> adver_images) {
        this.adver_images = adver_images;
    }

    @Override
    public int getCount() {
        // 设置有21亿+张广告数量(实际上只有adver_images.size()张)
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        ImageView view = adver_images.get(position % adver_images.size());
        container.addView(view);// 将view加入到viewPager中,这句很重要
        return view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }
}

定时器:

private Handler mAdvertiseHandler = new Handler() {
        public void handleMessage(Message msg) {        
        mAdverViewpager.setCurrentItem(mAdverViewpager.getCurrentItem() + 1);
            // 每隔三秒发送一次
            mAdvertiseHandler.sendEmptyMessageDelayed(0, 3000);
        }
    };

在初始化viewpager之后,将广告设置在第一亿多就好,以免往回滑动碰到边界而崩溃。

 //默认在1亿多
        mAdverViewpager.setCurrentItem(Integer.MAX_VALUE / 2 - ((Integer.MAX_VALUE / 2) % adver_images.size()));
        //3秒定时
        mAdvertiseHandler.sendEmptyMessageDelayed(0, 2000);

RecyclerView添加Header(头布局):
参考于:http://www.eoeandroid.com/thread-918398-1-1.html?_dsign=afb0ddb9
主要是以下2个类BaseRecyclerAdapter,WrapAdapter
BaseRecyclerAdapter是RecyclerView的Adapter基类
1、自己准备数据,然后写一个adapter继承BaseRecyclerAdapter

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.jiaui.recyclerviewhaderdemo.R;
import com.jiaui.recyclerviewhaderdemo.bean.NewsBean;
import com.jiaui.recyclerviewhaderdemo.widget.BaseRecyclerAdapter;

import java.util.LinkedList;

public class NewsAdapter extends BaseRecyclerAdapter<NewsBean.News, NewsAdapter.MyViewHolder> {

    public NewsAdapter(Context context) {
        super(context);
    }

    public NewsAdapter(Context context, LinkedList mItemList) {
        super(context, mItemList);
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.item_news_recyclerview, parent, false);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {

        NewsBean.News News = mItemLists.get(position);
        // 新闻图片
        Glide.with(mContext).load(News.getResId()).into(holder.image);
        holder.title.setText(News.getTitle());
        holder.count.setText(News.getCount() + "");
        holder.time.setText(News.getTime());
        holder.position = position;

    }

    public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView title;
        ImageView image;
        TextView time;
        TextView count;
        LinearLayout adContent;
        int position;

        public MyViewHolder(View NewsView) {
            super(NewsView);
            title = (TextView) NewsView.findViewById(R.id.news_title);
            image = (ImageView) NewsView.findViewById(R.id.news_image);
            time = (TextView) NewsView.findViewById(R.id.news_time);
            count = (TextView) NewsView.findViewById(R.id.news_count);
            adContent = (LinearLayout) NewsView.findViewById(R.id.news_content);
        }
    }
}

2、adapter写好之后,当做参数给WrapAdapter实例化

 // 新闻适配器
 mNewsAdapter = new NewsAdapter(this, newsData);
 mWrapAdapter = new WrapAdapter<>(mNewsAdapter);
 // 设置头部占据一行
 mWrapAdapter.adjustSpanSize(mNewsRecyclerView);
 // 设置RecyclerView的数据适配器(适配器包装)
 mNewsRecyclerView.setAdapter(mWrapAdapter);
 // 添加头布局
 mWrapAdapter.addHeaderView(headerLayout);

至此就完成了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

RecyclerView更全解析之 - 为它优雅的添加头部和底部

1.概述  上一期的RecyclerView更全解析之 - 打造通用的万能Adapter,解决了几个坑。那么这一期我们来动态为RecyclerView去加载头部和底部,为上一期的RecyclerVie...

Android框架之路——Banner实现轮播图(RecyclerView添加Header)

一、简介 Banner能实现循环播放多个广告图片和手动滑动循环等功能。因为原生ViewPager并不支持循环翻页, 要实现循环还得需要自己去动手。Banner框架可以进行不同样式、不同动画设置, ...

banner框架,一个比较齐全的框架

这是我解析 首先奉献上作者的github地址 https://github.com/youth5201314/banner  这是一个star数过千,fork数过百的轮子,用起来也是good的,不过使...

打造Android万能上拉下拉刷新框架--XRefreshView(三)

这段时间一直有朋友给我反馈,让我帮忙解决问题,我汇总了下,有以下几种: 1. 处理listview滑动删除与XRefreshView的冲突 2. 处理viewpager和XRefreshView的...

RecyclerView实现广告轮播图

之前做的轮播图,对于十几个图片什么的能够满足,但是万一有几千张,几万张就容易造成内存泄露,使用RecyclerView做的轮播,可以利用它自身的复用机制,比较节省内存。所以这种方式感觉效果更好。 准...

RecyclerView添加Header的正确方式

看了一下博客目录,已经有好几篇博客是关于RecyclerView的,不过对于这么一款强大的控件,我还是要再写一篇博客来学习一下,这篇博客的主题是《为RecyclerView添加header》,当然在看...

EasyRecyclerView 添加header,footer, 上拉加载更多的recyclerview

EasyRecyclerView EasyRecyclerView 支持添加header、footer,设置空白页面(无数据,网络异常显示)。 上拉加载更多,加载状态,网络异常状态,数据到底状态。 分...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)