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);
至此就完成了。