Android——XRecyclerView实现上拉下拉,多条目布局
来源:互联网 发布:java抽象类构造函数 编辑:程序博客网 时间:2024/06/05 05:17
Android——XRecyclerView实现上拉下拉,多条目布局
本篇主要是为实现上拉下拉,多条目布局。
XRecyclerView是对RecyclerView的再次封装,主要提供了刷新、加载功能。
与RecyclerView相比,主要是在适配器Adapter中做出了修改。
①:我们需要导入新的依赖包:
//bufferknifecompile 'com.jakewharton:butterknife:7.0.1'//OKhttp3 compile 'com.squareup.okio:okio:1.5.0' compile 'com.squareup.okhttp3:okhttp:3.2.0' compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'//XRecyclerViewcom.jcodecraeer:xrecyclerview:1.3.2' //bannner compile 'com.github.bumptech.glide:glide:3.5.2' compile files('libs/universal-image-loader-1.9.3.jar') compile files('libs/gson-2.3.1.jar')
②布局文件中原来RecyclerView用的是:<android.support.v7.widget.RecyclerView /> XRecyclerView用的是<com.jcodecraeer.xrecyclerview.XRecyclerView />
<com.jcodecraeer.xrecyclerview.XRecyclerView android:id="@+id/id_recyclerview" android:divider="#ffff0000" android:dividerHeight="10dp" android:layout_width="match_parent" android:layout_height="match_parent" />
③:我们在适配器中多添加了1个方法(与RecyclerView的适配器相比)getItemViewType()方法,主要是用来判断哪个布局。我的效果为第一个为Banner轮播图,剩下的全为LinearLayoutManager布局。
package adapter;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.TextView;import com.dabin.sanzhou.R;import com.nostra13.universalimageloader.core.ImageLoader;import com.youth.banner.Banner;import java.util.ArrayList;import java.util.List;import app.GlideImageLoader;import bean.NewBase;/** * Created by Dabin */public class SongAdapter extends RecyclerView.Adapter { private int TYPE_ONE = 0; private int TYPE_TWO = 1; MyViewHolder myViewHolder; private Context context; private List<NewBase.SongListBean> song_list; private List mylist = new ArrayList(); //构造方法,主要是用来传入数据 public SongAdapter(Context context, List<NewBase.SongListBean> song_list) { this.context = context; this.song_list = song_list; } //在oncreateViewHolder中,利用getItemViewType()方法进行判断,得到每个条目的ViewHolder @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if(getItemViewType(viewType) == TYPE_ONE){ myViewHolder = new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.songa_item, parent, false)); return myViewHolder; }else{ MyViewHoldertwo myViewHoldertwo = new MyViewHoldertwo(LayoutInflater.from(context).inflate(R.layout.songb_item, parent, false)); return myViewHoldertwo; } } //在onBindViewHolder中,也利用getItemType()得到相对应的ViewHolder,给它里面的控件赋值 @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (getItemViewType(position) == TYPE_ONE) { MyViewHolder holderone = (MyViewHolder) holder; for (int i = 0; i < song_list.size(); i++) { mylist.add(song_list.get(i).getPic_big()); } holderone.mybanner.setImageLoader(new GlideImageLoader()); holderone.mybanner.setImages(mylist); holderone.mybanner.start(); }else{ MyViewHoldertwo holdertwo = (MyViewHoldertwo) holder; ImageLoader.getInstance().displayImage(song_list.get(position).getPic_small(),((MyViewHoldertwo) holder).imageView); holdertwo.songname.setText(song_list.get(position).getTitle()); holdertwo.songauthor.setText(song_list.get(position).getAuthor()); } } //传过来数据的长度 @Override public int getItemCount() { return song_list.size(); } //第一个ViewHolder // ViewHolder 1 class MyViewHolder extends RecyclerView.ViewHolder { Banner mybanner; public MyViewHolder(View itemView) { super(itemView); mybanner = itemView.findViewById(R.id.mybanner); } } //第二个ViewHolder // ViewHolder 2 class MyViewHoldertwo extends RecyclerView.ViewHolder{ ImageView imageView; TextView songname; TextView songauthor; public MyViewHoldertwo(View itemView) { super(itemView); imageView = itemView.findViewById(R.id.songb_item_image); songname = itemView.findViewById(R.id.song_name); songauthor = itemView.findViewById(R.id.song_author); } } //getItemViewType方法,主要是用来进行多条目判断的,那几个数据用这个ViewHolder,其他的数据用那个Viewholder。 @Override public int getItemViewType(int position) { if (position == TYPE_ONE) { return TYPE_ONE; } else { return TYPE_TWO; } }}
④在.java文件中: OKhttp请求是封装好的类,源码中有。setLoadingListener()方法中onRefresh为上拉刷新,onLoadMore为下拉加载。
package com.dabin.sanzhou;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.StaggeredGridLayoutManager;import com.jcodecraeer.xrecyclerview.XRecyclerView;import java.io.IOException;import java.util.List;import adapter.SongAdapter;import bean.NewBase;import butterknife.Bind;import butterknife.ButterKnife;import okhttp3.Call;import utils.GsonObjectCallback;import utils.OkHttp3Utils;public class SongActivity extends AppCompatActivity { @Bind(R.id.id_recyclerview) XRecyclerView idRecyclerview; private String path = "http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type="; private int page = 1; private String path1 = "&size=10&offset=0"; List<NewBase.SongListBean> song_list; SongAdapter songAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_song); ButterKnife.bind(this); idRecyclerview.setLayoutManager(new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL)); getData(path + page + path1); //XRecyclerView 的监听方法 idRecyclerview.setLoadingListener(new XRecyclerView.LoadingListener() { //刷新 @Override public void onRefresh() { //refresh data here getData(path + 1 + path1); idRecyclerview.refreshComplete();//停止刷新 } //加载 @Override public void onLoadMore() { // load more data here page += 1; getData(path + page + path1); idRecyclerview.loadMoreComplete();//停止加载 } }); } //OKhttp3网络请求,我用的是封装好的okhttp,在源码处下载 public void getData(String urll) { OkHttp3Utils.doGet(urll, new GsonObjectCallback<NewBase>() { @Override public void onUi(NewBase newBase) { song_list = newBase.getSong_list(); songAdapter = new SongAdapter(SongActivity.this, song_list); idRecyclerview.setAdapter(songAdapter); } @Override public void onFailed(Call call, IOException e) { } }); }}
源码地址:https://github.com/Dabinai/XRecyclerView
阅读全文
0 0
- Android——XRecyclerView实现上拉下拉,多条目布局
- XRecyclerView实现上拉下拉
- XRecyclerView上拉下拉
- XRecyclerView和万能baseeAdapter 实现上拉下拉刷新列表
- xrecyclerview多条目布局
- XRecyclerView的上拉下拉加载数据
- XRecyclerView的多条目请求数据,可以实现上拉加载下拉刷新
- XRecyclerView+上拉加载下拉刷新+多条目加载
- Android XRecyclerView(多条目加载实现)
- RecyclerView列表九宫格瀑布流,多条目,SpringView实现上拉下拉刷新
- 简单实现上拉下拉,增加头条目和尾条目的RecyclerView
- Android XRecyclerView简单实现上拉刷新,下拉加载
- Android 仿iOS上拉下拉界面的效果实现
- MVP okhttp+springview+RecyclerView 上拉下拉功能+多条目加载
- ListView多条目每次加载数字加20和xlistview上拉下拉
- MVP实现xRecyclerview多条目加载
- xrecyclerview实现两种多条目
- SwipeRefreshLayout实现上拉下拉刷新
- servlet的执行流程
- springboot+swagger2事例
- 微信小程序入门开发
- win10系统中eNSP AR启动失败错误代码40及VirtualBox不兼容的解决办法
- 今年最新的30个Android库,你了解吗?
- Android——XRecyclerView实现上拉下拉,多条目布局
- MTK AF 驱动
- 请教下关于For循环和mysql的IN查询哪种效率高一些?
- 3-进化后的const
- Debian系统编译opencv-2.4.9库利用S5P6818多核来加速图像处理
- opencv-霍夫线变换
- UVA11383 二分图最佳完美匹配(模板程序)
- 在framework中添加字符串资源
- 什么是nodejs