这里为什么要用带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); } } }
这里没上传工具类和拦截器,看看就好!!