/ XRecyclerView  下拉刷新  上拉加载 

XRecyclerView的下拉刷新与加载


  1. XRecyclerView可以实现下拉刷新和上拉加载,是一个比较常用的框架。

     使用的时候我们需要先导入依赖,

compile 'com.jcodecraeer:xrecyclerview:1.5.8'  
implementation 'com.android.support:design:26+'//TabLayout依赖

导入依赖之后,我们可以在布局文件中使用控件。

    适配器的写法与RecyclerView的使用方法类似:

public class ProductsXRecyclerAdapter extends XRecyclerView.Adapter<ProductsXRecyclerAdapter.MyViewHolder> {  
  
  
    private Activity activity;  
    private List<ProductsBean.DataBean> data;  
  
    public ProductsXRecyclerAdapter(Activity activity, List<ProductsBean.DataBean> data) {  
        this.activity = activity;  
        this.data = data;  
    }  
  
    @Override  
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {  
        View inflate = LayoutInflater.from(activity).inflate(R.layout.products_recycler_item_layout, null);  
        MyViewHolder myViewHolder = new MyViewHolder(inflate);  
  
        return myViewHolder;  
    }  
  
    @Override  
    public void onBindViewHolder(MyViewHolder holder, final int position) {  
        holder.itemView.setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View view) {  
                Intent intent = new Intent(activity, DetailActivity.class);  
                int pid = data.get(position).getPid();  
                intent.putExtra("pid",pid + "");  
                activity.startActivity(intent);  
                activity.finish();  
            }  
        });  
        String images = data.get(position).getImages();  
        String[] split = images.split("!");  
        Glide.with(activity).load(split[0]).into(holder.img);  
        holder.title.setText(data.get(position).getTitle());  
        holder.price.setText("¥" + data.get(position).getPrice() + "");  
        holder.price.setText("¥" + data.get(position).getBargainPrice() + "");  
    }  
  
    @Override  
    public int getItemCount() {  
        return data.size();  
    }  
  
    class MyViewHolder extends XRecyclerView.ViewHolder{  
  
        private final ImageView img;  
        private final TextView title;  
        private final TextView price;  
        private final TextView youhuijia;  
  
        public MyViewHolder(View itemView) {  
            super(itemView);  
            img = itemView.findViewById(R.id.products_recycler_img);  
            title = itemView.findViewById(R.id.products_recycler_text_title);  
            price = itemView.findViewById(R.id.products_recycler_text_price);  
            youhuijia = itemView.findViewById(R.id.products_recycler_text_youhuijia);  
        }  
    }  
  
}

java代码:

private XRecyclerView product_recycler;  
    private List<ProductsBean.DataBean> data = new ArrayList<>();  
    private ProductsXRecyclerAdapter adapter;  
    private int page = 1;  
    private Map<String,String> map = new HashMap<>();  
    private int pscid;  
    private IParesenter iParesenter = new ProductsPresenter(this);  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_products);  
        initView();//先加载控件  
        pscid = getIntent().getIntExtra("pscid",0);//需要的参数  
        loadData();//默认加载第一页的数据  
        product_recycler.setLoadingMoreEnabled(true);  
  
        product_recycler.setLoadingListener(new XRecyclerView.LoadingListener() {//上拉下拉的监听  
            @Override  
            public void onRefresh() {  
                page = 1;  
                loadData();//下拉刷新时page为1,请求网络  
            }  
  
            @Override  
            public void onLoadMore() {//上拉加载更多时,page++,请求网络  
                page ++;  
                loadData();  
            }  
        });  
  
    }  
  
    public void loadData(){  
  
        if (page > 3){//因为页面最多有3页,如果page>3那么提示信息  
            Toast.makeText(this, "没有更多了", Toast.LENGTH_SHORT).show();  
            product_recycler.loadMoreComplete();  
        }else {//存储参数的集合每次都需要清空之后再传入参数  
            map.clear();  
            map.put("pscid",pscid + "");  
            map.put("page",page + "");  
            iParesenter.getDatahasParams(map);  
        }  
  
    }  
  
    public void initView(){  
        product_recycler = findViewById(R.id.products_xrecycler);  
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);  
        product_recycler.setLayoutManager(linearLayoutManager);  
        adapter = new ProductsXRecyclerAdapter(this,data);  
        product_recycler.setAdapter(adapter);  
    }  
  
    @Override  
    public void getProductsSuccess(ProductsBean productsBean) {//网络请求成功之后的方法  
        if (page == 1){//如果page==1,那么代表是刷新方法,需要将data集合中的数据清空。  
            data.clear();  
            product_recycler.refreshComplete();  
        }else {//page != 1那么是加载更多  
            product_recycler.loadMoreComplete();  
        }  
  
        data.addAll(productsBean.getData());//将数据添加到集合中,刷新适配器,更新界面  
        adapter.notifyDataSetChanged();  
    }  
  
    @Override  
    public void getProductsFailed(String error) {//获取数据失败的回调,log打印错误信息  
        Log.d("test",error);  
    }


发布评论

热门评论区: