RecyclerView列表九宫格瀑布流,多条目,SpringView实现上拉下拉刷新
2017-11-08 21:17
477 查看
首先导入RecyclerView的依赖,SpringView的依赖
compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.liaoinstan.springview:library:1.3.0'
build.gradle里面的
导入依赖,编译完成之后,
application中初始化imageloader
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上拉下拉
填充到适配器里面的布局layout_item
另一个多条目适配器,引入两个不同的布局
muti_item1
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; } }
相关文章推荐
- RecyclerView条目跳转+SpringView数据刷新加载+MVP+OKhttp+拦截器+自定义view 实现请求网络数据的二级列表购物车
- Android——XRecyclerView实现上拉下拉,多条目布局
- Recyclerview实现瀑布流布局及条目的点击事件
- [置顶] RecyclerView实现加载多种条目类型,仿新闻列表多种item布局.
- RecyclerView+SwipeRefreshLayout实现下拉刷新列表
- Android RecyclerView (二)初学,实现GridView列表和瀑布流效果。
- RecyclerView实现瀑布流、条目的增加、删除
- Material Design最佳体验(2): 使用RecyclerView、CardView、SwipeRefreshLayout实现下拉刷新列表
- BaseRecyclerViewAdapterHelper 实现不同条目的列表
- RecyclerView + 九宫格图片 + ViewPager + PhotoView 实现列表图片点击放大并能缩放思路
- MVP实现Recyclerview加Springview上拉加载下拉刷新点击条目可跳转到购物车
- 使用MVP,OKHttp封装类及其拦截器,RecyclerView,SpringView,ImageLoader实现数据的多条目加载
- XRecyclerView和万能baseeAdapter 实现上拉下拉刷新列表
- 用RecyclerView实现新闻列表页,包括头部的图片轮播,两种Item显示方式,下拉刷新和上拉加载以及限制列表的加载条目数
- (4.1.11.1)Android中使用RecyclerView和CardView实现瀑布流效果(StaggeredGrid)
- RecyclerView实现上拉刷新,下拉加载,item点击事件
- (更新版)Android VideoPlayer 在滚动列表实现item视频播放(ListView控件和RecyclerView)
- Retrofit+RecyclerView+SwipeRefreshlayout实现上拉刷新和分页加载
- 实现一个列表只需一行代码-RecyclerView适配器暴力封装
- RecyclerView瀑布流实现