XRecycleView

这里为什么要用带X的,顾名思义,一般带X的都要比原来的牛逼些,那么这个带X的牛逼在那里呢?

当然我们知道原来的RecycleView不能下拉上拉,还需要自己在外面套一个滑动布局(前面有总结)。这个带X的就不用了;

这里XRecycleView有一个帖子,是非常好用的,不过是本地数据没有请求,还需要自己写;

http://blog.csdn.net/Dream_JK/article/details/76669142

这里是自己用了一下,用的网络数据,但需要拦截器,:

MainActivity:

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.util.Log;

import com.jcodecraeer.xrecyclerview.XRecyclerView;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import okhttp3.Call;
import utils.GsonObjectCallback;
import utils.OkHttp3Utils;

public class MainActivity extends AppCompatActivity {
    private XRecyclerView recyclerView;
    private Context context;
    //数据集合
    private List<String> list = new ArrayList<>();
    //获取数据的开始
    private int offset=0;
    private ArrayList<User> mDatas;
    private MyAdapter adapter;
    private String mpath="http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type=1&size=12";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportActionBar().hide();
        context = this;
        recyclerView = (XRecyclerView) findViewById(R.id.xre_xrv);


        //LinearLayoutManager是线性布局,setOrientation可以设置他的方向是横向还是纵向。
        LinearLayoutManager layoutManager = new LinearLayoutManager(context);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(layoutManager);

        //GridLayoutManager是表格布局,GridLayoutManager(Context,表格的个数(根据方向决定横排几个或纵排几个))
//        GridLayoutManager layoutManager1=new GridLayoutManager(context,3);
//        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
//        recyclerView.setLayoutManager(layoutManager1);


        //StaggeredGridLayoutManager是瀑布流,StaggeredGridLayoutManager(横或纵排个数,方向)
//        StaggeredGridLayoutManager staggeredGridLayoutManager=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
//        recyclerView.setLayoutManager(staggeredGridLayoutManager);


        //XRecyclerView的上下拉监听方法
        recyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            //下拉刷新
            public void onRefresh() {
                //当下拉刷新的时候,重新获取数据,所有curr要变回0,并且把集合list清空
                String mpath2=mpath+"&offset=0";
                list.clear();
                initData(mpath2);
                recyclerView.refreshComplete();
            }

            @Override
            //上拉加载
            public void onLoadMore() {
                //当上拉加载的时候,因为一次获取是10个数据,所也在获取的时候就要在加10的地方开始获取
//                如:第一次0——9;
//                    第二次10——19;
//                SystemClock.sleep(1000);
                offset+=10;
                String mpath2=mpath+"&offset="+offset;
                initData(mpath2);
                recyclerView.refreshComplete();
            }
        });

        //第一次获取数据
        String mpath2=mpath+"&offset=0";
        initData(mpath2);

    }


    private void initData(String mpath2){
        OkHttp3Utils.getInstance().doGet(mpath, new GsonObjectCallback<MyNewsGons>() {
            @Override
            public void onUi(MyNewsGons myNewsGons) {
                Log.d("main",myNewsGons.toString());
                mDatas = new ArrayList<User>();
                List<MyNewsGons.SongListBean> song_list = myNewsGons.getSong_list();
                for (MyNewsGons.SongListBean ms:song_list) {
                    mDatas.add(new User(ms.getPic_small(),ms.getTitle()));
                }
                recyclerView.setAdapter(adapter = new MyAdapter(mDatas,MainActivity.this));
            }
            @Override
            public void onFailed(Call call, IOException e) {

            }
        });
    }
}

适配器:Myadapter:

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.nostra13.universalimageloader.core.ImageLoader;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by admin on 2017/10/23.
 */
public   class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
    private ArrayList<User > list=new ArrayList<>();
    private Context context;
    public MyAdapter(ArrayList<User> list, Context context) {
        this.list = list;
        this.context = context;
    }
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //给Adapter添加布局,bq把这个view传递给HoldView,让HoldView找到空间
        View view= LayoutInflater.from(context).inflate(R.layout.xrecyc_adapter, parent,false);
        HoldView holdView=new HoldView(view);
        return holdView;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        //position为Adapter的位置,数据从list里面可以拿出来。
        User user = list.get(position);
        ((HoldView)holder).textView.setText(user.getTitle());
        ImageLoader img=ImageLoader.getInstance();
        img.displayImage(user.getImg(),((HoldView) holder).img);
    }

    @Override
    public int getItemCount() {
        return list.size();
    }
    private class HoldView extends RecyclerView.ViewHolder{
        private TextView textView;
        private ImageView img;
        public HoldView(View itemView) {
            super(itemView);
            //根据onCreateViewHolder的HoldView所添加的xml布局找到空间
            textView= (TextView) itemView.findViewById(R.id.xrecyc_text);
            img= (ImageView) itemView.findViewById(R.id.img);
        }
    }
}

这里没上传工具类和拦截器,看看就好!!

posted @ 2017-10-23 20:02  菜鸟东东  阅读(310)  评论(0编辑  收藏  举报