首先导入RecyclerView的依赖,SpringView的依赖
compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.liaoinstan.springview:library:1.3.0'
build.gradle里面的
dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:25.+' compile 'com.android.support:recyclerview-v7:25.3.1' compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' compile 'com.liaoinstan.springview:library:1.3.0' }
导入依赖,编译完成之后,
application中初始化imageloader
<application
android:name=".MyApplication"
</application>
public class MyApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this).build();
ImageLoader.getInstance().init(configuration);
}
}
activity_main
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<!--外层是springview-->
<com.liaoinstan.springview.widget.SpringView
android:layout_width="match_parent"
android:id="@+id/springview"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recyclerview" >
</android.support.v7.widget.RecyclerView>
</com.liaoinstan.springview.widget.SpringView>
</RelativeLayout>
MainActivity里面获取id,设置装数据的集合,设置布局管理器,设置适配器,设置springview上拉下拉
public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private List<String> list; private SpringView springView; private List<String> listbig = new ArrayList<>(); private MutiAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView = (RecyclerView) findViewById(R.id.recyclerview); springView = (SpringView) findViewById(R.id.springview); list = new ArrayList<>(); //集合里装着图片的网址 list.add("http://f10.baidu.com/it/u=2881303562,336932824&fm=72"); list.add("http://f11.baidu.com/it/u=681755471,2018070071&fm=72"); list.add("http://f10.baidu.com/it/u=960650584,863938083&fm=72"); list.add("http://img0.imgtn.bdimg.com/it/u=783060973,4278100629&fm=27&gp=0.jpg"); list.add("http://img1.imgtn.bdimg.com/it/u=3743124979,3234956668&fm=27&gp=0.jpg"); list.add("http://img4.imgtn.bdimg.com/it/u=3468613159,957707785&fm=27&gp=0.jpg"); list.add("http://img3.imgtn.bdimg.com/it/u=2971205354,485034289&fm=27&gp=0.jpg"); list.add("http://f10.baidu.com/it/u=2881303562,336932824&fm=72"); list.add("http://f11.baidu.com/it/u=681755471,2018070071&fm=72"); list.add("http://f10.baidu.com/it/u=960650584,863938083&fm=72"); list.add("http://img0.imgtn.bdimg.com/it/u=783060973,4278100629&fm=27&gp=0.jpg"); list.add("http://img1.imgtn.bdimg.com/it/u=3743124979,3234956668&fm=27&gp=0.jpg"); list.add("http://img4.imgtn.bdimg.com/it/u=3468613159,957707785&fm=27&gp=0.jpg"); list.add("http://img3.imgtn.bdimg.com/it/u=2971205354,485034289&fm=27&gp=0.jpg"); listbig.addAll(list); //new适配器,,RecyclerAdapter里面是普通的 //final RecyclerAdapter adapter = new RecyclerAdapter(MainActivity.this,listbig); //MutiAdapter是多条目的 adapter = new MutiAdapter(MainActivity.this,listbig); //设置布局管理器 //recyclerView.setLayoutManager(new GridLayoutManager(MainActivity.this,3));//九宫格布局 //瀑布式布局 // recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3, LinearLayout.VERTICAL)); recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false)); recyclerView.setAdapter(adapter); //接口的实现,new接口 adapter.setDianjiCallBack(new DianjiCallBack() { @Override public void dianji(View view, int position) { Toast.makeText(MainActivity.this,position+"",Toast.LENGTH_SHORT).show(); } }); springView.setHeader(new DefaultHeader(this)); springView.setFooter(new DefaultFooter(this)); springView.setListener(new SpringView.OnFreshListener() { @Override public void onRefresh() { //下拉刷新 springView.onFinishFreshAndLoad(); listbig.addAll(0,list); adapter.notifyDataSetChanged(); } @Override public void onLoadmore() { //上拉加载 springView.onFinishFreshAndLoad(); listbig.addAll(list); adapter.notifyDataSetChanged(); } }); } }
填充到适配器里面的布局layout_item接口<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="wrap_content"> <ImageView android:src="@mipmap/ic_launcher" android:scaleType="centerCrop" android:id="@+id/item_imageview" android:layout_width="140dp" android:layout_height="120dp" /> </LinearLayout>
RecyclerAdapterpublic interface DianjiCallBack { public void dianji(View view,int position); }
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ImageViewHolder>{ Context context; List<String> listbig; //定义宽度 private int itemWidth; public RecyclerAdapter(Context context, List<String> listbig) { this.listbig = listbig; this.context = context; //设置宽度 WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); int width = wm.getDefaultDisplay().getWidth(); itemWidth = width / 3;//定义固定的宽度 } @Override //创建viewholder public ImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //创建一个view View view = View.inflate(context, R.layout.layout_item,null); //newviewholder将引入的布局视图传进去 ImageViewHolder imageViewHolder = new ImageViewHolder(view); return imageViewHolder; } @Override //绑定view 显示数据 public void onBindViewHolder(ImageViewHolder holder, final int position) { //设置高 ViewGroup.LayoutParams params = holder.itemimageview.getLayoutParams(); //初始高度300 int itemHeight = 300; itemHeight = new Random().nextInt(500); if(itemHeight < 300){ itemHeight = 300; } //给imageview设置宽高 params.width = itemWidth; params.height = itemHeight; holder.itemimageview.setLayoutParams(params); //显示图片 ImageLoader.getInstance().displayImage(listbig.get(position),holder.itemimageview); //设置点击事件, holder.itemimageview.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dianjiCallBack.dianji(v,position); } }); } @Override public int getItemCount() { return listbig.size();//集合的长度 } //必须写的viewholder static class ImageViewHolder extends RecyclerView.ViewHolder { private final ImageView itemimageview; public ImageViewHolder(View itemView) { super(itemView); //itemview是传进来的view视图,获取里面的id itemimageview = (ImageView) itemView.findViewById(R.id.item_imageview); } } //接口的实现 DianjiCallBack dianjiCallBack; public void setDianjiCallBack(DianjiCallBack dianjiCallBack){ this.dianjiCallBack = dianjiCallBack; } }
另一个多条目适配器,引入两个不同的布局
muti_item1<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:gravity="center" android:layout_height="match_parent"> <ImageView android:src="@mipmap/ic_launcher" android:scaleType="centerCrop" android:id="@+id/item1_imageview" android:layout_width="140dp" android:layout_height="170dp" /> </LinearLayout>
muti_item2另一个适配器.多条目的,里面拥有多个viewholder<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:gravity="center" android:orientation="horizontal" android:layout_height="match_parent"> <ImageView android:src="@mipmap/ic_launcher" android:id="@+id/item2_imageview" android:layout_width="120dp" android:layout_height="100dp" /> <TextView android:background="@color/colorPrimary" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/item2_textview"/> </LinearLayout>
public class MutiAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{ Context context; List<String> listbig; private ViewHolder1 holder1; private ViewHolder2 holder2; public MutiAdapter(Context context, List<String> listbig) { this.context = context; this.listbig = listbig; } //创建布局的 @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if(viewType == 0){ //如果类型是0 View view = View.inflate(context,R.layout.muti_item1,null); holder1 = new ViewHolder1(view); return holder1; }else{ View view = View.inflate(context,R.layout.muti_item2,null); holder2 = new ViewHolder2(view); return holder2; } } //绑定 显示view @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { //判断是哪个viewholder if(holder instanceof ViewHolder1){ //将holder强转成viewholder1 ViewHolder1 viewHolder1 = (ViewHolder1) holder; //设置显示的内容 ImageLoader.getInstance().displayImage(listbig.get(position),viewHolder1.item1_imageview); viewHolder1.item1_imageview.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //接口回调 dianjiCallBack.dianji(v,position); } }); }else{ //强转 ViewHolder2 viewHolder2 = (ViewHolder2) holder; //设置显示的内容 viewHolder2.item2_textview.setText("这是第"+(position+1)+"个"); ImageLoader.getInstance().displayImage(listbig.get(position),viewHolder2.item2_imageview); //给控件设置点击事件 viewHolder2.item2_imageview.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dianjiCallBack.dianji(v,position); } }); } } //条目的数量 @Override public int getItemCount() { return listbig.size();//集合的长度 } @Override public int getItemViewType(int position) { return position % 2;//两种类型,,就是0或1 } //两种条目的viewholder static class ViewHolder1 extends RecyclerView.ViewHolder { private final ImageView item1_imageview; public ViewHolder1(View itemView) { super(itemView); item1_imageview = (ImageView) itemView.findViewById(R.id.item1_imageview); } } static class ViewHolder2 extends RecyclerView.ViewHolder{ private final ImageView item2_imageview; private final TextView item2_textview; public ViewHolder2(View itemView) { super(itemView); item2_imageview = (ImageView) itemView.findViewById(R.id.item2_imageview); item2_textview = (TextView) itemView.findViewById(R.id.item2_textview); } } //接口的实现 DianjiCallBack dianjiCallBack; public void setDianjiCallBack(DianjiCallBack dianjiCallBack){ this.dianjiCallBack = dianjiCallBack; } }