RecyclerView列表九宫格瀑布流,多条目,SpringView实现上拉下拉刷新

首先导入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>
接口
public interface DianjiCallBack {
    public void dianji(View view,int position);
}
RecyclerAdapter
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
<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>
另一个适配器.多条目的,里面拥有多个viewholder
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;
    }
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值