🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
github地址:[https://github.com/XRecyclerView/XRecyclerView](https://github.com/XRecyclerView/XRecyclerView) #### 引包 ~~~ compile 'com.jcodecraeer:xrecyclerview:1.5.9' ~~~ #### 说明 本篇使用一个例子说明XRecyclerView的使用。在使用过程中,模拟10条数据一页,然后加载更多,如果十条数据没有占满整个屏幕,那么加载更多功能也就失效了,也许这是个bug,但在正式开发中几乎不会有影响(很少出现一页数据还占不满屏幕的情况) #### 列表布局 ~~~ <com.jcodecraeer.xrecyclerview.XRecyclerView android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="20dp" android:background="#ffffff"/> ~~~ #### 子列表项布局 ~~~ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="100dp"> <TextView android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="match_parent" android:text="test" android:gravity="center"/> </LinearLayout> ~~~ #### 适配器 ~~~ 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.TextView; import java.util.ArrayList; import java.util.List; public class MyAdapter extends RecyclerView.Adapter<MyAdapter.RecyclerHolder> { private List<String> dataList = new ArrayList<>(); private Context mContext; public MyAdapter(Context mContext, List<String> dataList) { this.mContext = mContext; this.dataList = dataList; } public void addtData(List<String> dataList) { if (null != dataList) { this.dataList.addAll(dataList); notifyDataSetChanged(); } } public void setData(List<String> dataList) { if (null != dataList) { this.dataList.clear(); this.dataList.addAll(dataList); notifyDataSetChanged(); } } @Override public RecyclerHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(mContext).inflate(R.layout.item, parent, false); return new RecyclerHolder(view); } @Override public void onBindViewHolder(RecyclerHolder holder, int position) { holder.textView.setText(dataList.get(position)); } @Override public int getItemCount() { return dataList.size(); } class RecyclerHolder extends RecyclerView.ViewHolder { public TextView textView; private RecyclerHolder(View itemView) { super(itemView); textView = itemView.findViewById(R.id.tv); } } } ~~~ #### java代码 描述放到了注释中 ~~~ mport android.os.Bundle; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import com.jcodecraeer.xrecyclerview.ProgressStyle; import com.jcodecraeer.xrecyclerview.XRecyclerView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { // 定义 private XRecyclerView mRecyclerView; private MyAdapter mAdapter; // 存储数据 private List<String> dataList = new ArrayList<>(); // 模拟接口返回的10条数据 private List<String> testList() { List<String> mytest = new ArrayList<>(); for(int i = 0 ; i < 10; i++) { mytest.add("test" + System.currentTimeMillis()); } return mytest; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 定义 mRecyclerView = findViewById(R.id.recyclerview); mAdapter = new MyAdapter(this, dataList); // XRecyclerView的使用,和RecyclerView几乎一致 LinearLayoutManager layoutManager = new LinearLayoutManager(this); layoutManager.setOrientation(LinearLayoutManager.VERTICAL); mRecyclerView.setLayoutManager(layoutManager); mRecyclerView.setAdapter(mAdapter); // 可以设置是否开启加载更多/下拉刷新 mRecyclerView.setLoadingMoreEnabled(true); // 可以设置加载更多的样式,很多种 mRecyclerView.setLoadingMoreProgressStyle(ProgressStyle.Pacman); // 如果设置上这个,下拉刷新的时候会显示上次刷新的时间 mRecyclerView.getDefaultRefreshHeaderView() // get default refresh header view .setRefreshTimeVisible(true); // make refresh time visible,false means hiding // 添加数据 mAdapter.addData(testList()); // 添加刷新和加载更多的监听 mRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() { @Override public void onRefresh() { mAdapter.setData(testList()); // 为了看效果,加了一个等待效果,正式的时候直接写mRecyclerView.refreshComplete(); new Handler().postDelayed(new Runnable() { @Override public void run() { mRecyclerView.refreshComplete(); } }, 2000); } @Override public void onLoadMore() { mAdapter.addData(testList()); // 为了看效果,加了一个等待效果,正式的时候直接写mRecyclerView.loadMoreComplete(); new Handler().postDelayed(new Runnable() { @Override public void run() { mRecyclerView.loadMoreComplete(); } }, 2000); } }); } } ~~~