XRecyclerView 实现下拉刷新和上拉加载更多

添加依赖:compile 'com.jcodecraeer:xrecyclerview:1.3.2'
 
public class MainActivity extends AppCompatActivity {

    int type = 21;
    private User user;
    private XRecyclerView rv;
    private MyRVAdapter adapter;
    boolean flag = true;

    android.os.Handler handler = new android.os.Handler();
    private List<User.SongListBean> list;
    private List<User.SongListBean> list1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list = new ArrayList<User.SongListBean>();

        rv = (XRecyclerView) findViewById(R.id.rv);

        initRV();
    }

    private void initRV() {
        // 初始化布局管理器
        LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.this);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        // 设置布局管理器
        rv.setLayoutManager(layoutManager);
        rv.setLoadingMoreEnabled(true);
        rv.setLoadingMoreProgressStyle(ProgressStyle.Pacman);
        /// 初始化数据源
        initData();

        // 下拉刷新
        rv.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    flag = true;
                    type ++;
                    initData();
                    adapter.notifyDataSetChanged();
                    rv.refreshComplete();
                }
            },3000);


            }

            // 上拉加载
            @Override
            public void onLoadMore() {

                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        flag = false;
                        type ++;
                        initData();
                        adapter.notifyDataSetChanged();
                        rv.refreshComplete();
                    }
                },3000);

            }
        });

    }

    private void initData() {
        // 请求数据
        OkHttp3LUtils.doGet("http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type=" + type + "&size=20&offset=0", new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                user = new Gson().fromJson(response.body().string(), User.class);
                if(flag){
                    list = user.getSong_list();
                }else{
                    list1 = new ArrayList<User.SongListBean>();
                    list1 = list = user.getSong_list();
                    list1.addAll(list);
                }


                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        // 设置适配器
                        adapter = new MyRVAdapter();
                        rv.setAdapter(adapter);
                        // 添加头布局
                        TextView title = new TextView(MainActivity.this);
                        adapter.addHeader(title);

                    }
                });
            }
        });
    }

        // 适配器

        class MyRVAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

            public static final int TYPE_HEADER = 0;
            public static final int TYPE_BO = 1;

            List<View> list = new ArrayList<>();
            // 添加头布局
            public void addHeader(View view) {
                list.add(view);
            }

            @Override
            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                if (viewType == TYPE_HEADER) {
                    View view = View.inflate(MainActivity.this, R.layout.rv_header, null);
                    MyHeaderHolder headerHolder = new MyHeaderHolder(view);
                    return headerHolder;
                } else {
                    View view = View.inflate(MainActivity.this, R.layout.rv_item, null);
                    MyViewHolder holder = new MyViewHolder(view);
                    return holder;
                }
            }

            @Override
            public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
                if (holder instanceof MyHeaderHolder) {
                    ((MyHeaderHolder) holder).h_title.setText(user.getBillboard().getName());
                    ((MyHeaderHolder) holder).h_name.setText(user.getBillboard().getUpdate_date());
                    ((MyHeaderHolder) holder).h_info.setText(user.getBillboard().getComment());
                    ImageLoader.getInstance().displayImage(user.getBillboard().getPic_s210(), ((MyHeaderHolder) holder).h_iv);
                }

                if (holder instanceof MyViewHolder) {
                    ((MyViewHolder) holder).title.setText(user.getSong_list().get(position).getTitle());
                    ((MyViewHolder) holder).author.setText(user.getSong_list().get(position).getAuthor());
                    ((MyViewHolder) holder).name.setText(user.getSong_list().get(position).getAlbum_title());
                    ImageLoader.getInstance().displayImage(user.getSong_list().get(position).getPic_big(), ((MyViewHolder) holder).iv);
                }
            }

            @Override
            public int getItemCount() {
                return user.getSong_list() == null ? 0 : user.getSong_list().size();
            }

            @Override
            public int getItemViewType(int position) {
                if (position < list.size()) {
                    return TYPE_HEADER;
                } else {
                    return TYPE_BO;
                }
            }

            class MyHeaderHolder extends RecyclerView.ViewHolder {

                TextView h_title, h_name, h_info, h_author;
                ImageView h_iv;
                RelativeLayout rl;

                public MyHeaderHolder(View itemView) {
                    super(itemView);
                    h_iv = itemView.findViewById(R.id.header_iv);
                    h_title = itemView.findViewById(R.id.header_title);
                    h_author = itemView.findViewById(R.id.header_author);
                    h_name = itemView.findViewById(R.id.header_name);
                    h_info = itemView.findViewById(R.id.header_info);
                    rl = itemView.findViewById(R.id.rl);
                }
            }

            class MyViewHolder extends RecyclerView.ViewHolder {

                TextView title, name, author;
                ImageView iv;


                public MyViewHolder(View itemView) {
                    super(itemView);

                    title = itemView.findViewById(R.id.title);
                    name = itemView.findViewById(R.id.name);
                    iv = itemView.findViewById(R.id.iv);
                    author = itemView.findViewById(R.id.author);
                }
            }
        }
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值