├── README.md └── YRecycleview ├── app ├── build.gradle └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── cn │ │ └── yu │ │ └── yuan │ │ ├── AddHeadViewActivity.java │ │ ├── DemoAdapter.java │ │ ├── DemoSwipeAdapter.java │ │ ├── LoadMoreAndRefreshActivity.java │ │ ├── LoadingEmptyViewActivity.java │ │ ├── MainActivity.java │ │ ├── SwipeDate.java │ │ └── SwipeLoadMoreAndRefreshActivity.java │ └── res │ ├── layout │ ├── activity_empty_view.xml │ ├── activity_loading_empty_view.xml │ ├── activity_loadmore_refresh.xml │ ├── activity_main.xml │ ├── head_custom.xml │ ├── item.xml │ ├── item_content.xml │ └── item_swipe_menu.xml │ ├── mipmap-hdpi │ └── ic_launcher.png │ ├── mipmap-mdpi │ └── ic_launcher.png │ ├── mipmap-xhdpi │ └── ic_launcher.png │ ├── mipmap-xxhdpi │ └── ic_launcher.png │ ├── mipmap-xxxhdpi │ └── ic_launcher.png │ ├── values-w820dp │ └── dimens.xml │ └── values │ ├── colors.xml │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── img └── picture.gif ├── mylibrary ├── build.gradle └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── yuan │ │ └── kuo │ │ └── yu │ │ ├── load │ │ ├── BaseProgressController.java │ │ ├── CircleLoadingView.java │ │ └── CircleProgress.java │ │ └── view │ │ ├── YRecyclerView.java │ │ ├── YRecycleviewRefreshFootView.java │ │ └── YRecycleviewRefreshHeadView.java │ └── res │ ├── drawable-xhdpi │ └── arrow_down.png │ ├── layout │ ├── emptyview.xml │ ├── foot_recycleview_loadmore.xml │ └── head_recycleview_refresh.xml │ └── values │ ├── attrs.xml │ ├── colors.xml │ └── strings.xml └── settings.gradle /README.md: -------------------------------------------------------------------------------- 1 | ## 这是一个下拉刷新和下拉加载的Recycleview的控件,实现的想法来自于XListview 2 | 使用方法很简单 3 | 4 | ## 看下效果图展示 5 | ![这里写图片描述](https://img-blog.csdn.net/20170325160739077?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRWFza1NoYXJr/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 6 | 7 | ### maven引用方式 8 | ``` 9 | 10 | cn.yuan.yu.recycleview 11 | mylibrary 12 | 1.0.4 13 | pom 14 | 15 | ``` 16 | ### gradle引用方式 17 | ``` 18 | compile 'cn.yuan.yu.recycleview:mylibrary:1.0.4' 19 | ``` 20 | ```javascript 21 | 布局文件添加 22 | 26 | 27 | 28 | 29 | ``` 30 | ### 至于更改上啦刷新和下拉加载的动画,我发现了一个更加简单的方式去实现,就是通过帧动画的形式,直接设置,方便diy设置 31 | ### 其他的适配器以及正常编写都是和官方的一样,没有任何改变上手比较容易简单 32 | # 有问题请反馈 33 | * 邮件(yukuoyuan@hotmail.com) 34 | * QQ: 152046273 35 | * 博客: [CSDN博客](http://blog.csdn.net/easkshark) 36 | 37 | ### 更新日志 38 | - 2018/6/23:修复了上拉加载更多的时候出现空白间隙问题的修改 39 | - 2018/2/10:增加添加头布局功能 40 | - 2018/2/5 :重构了空数据下拉刷新的方法的修改,移除了无用的方法 41 | - 2017/5/27:提交了设置空布局,以及空布局可以下拉加载的方法以及Demo 42 | - 2017/5/16:有同学提出,刷新单个条目的时候,有问题,这个问题是因为处理headview导致的,感谢[PascalGUO](https://github.com/pascalGuo)提的bug. 43 | - 2017/4/19:修复了因为没有上啦刷新,导致删除数据索引越界的问题,感谢[XiaoDada](https://github.com/XiaoDada)提的bug. 44 | - 2016/3/30:提交了第一个版本的YRecycleview. 45 | -------------------------------------------------------------------------------- /YRecycleview/app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 23 5 | buildToolsVersion '25.0.0' 6 | 7 | defaultConfig { 8 | applicationId "cn.yu.yuan" 9 | minSdkVersion 15 10 | targetSdkVersion 23 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | compile fileTree(include: ['*.jar'], dir: 'libs') 24 | compile 'com.android.support:appcompat-v7:23.3.0' 25 | compile 'com.daimajia.swipelayout:library:1.2.0@aar' 26 | compile project(':mylibrary') 27 | compile 'cn.yuan.yu.recycleview:mylibrary:1.0.4' 28 | } 29 | 30 | -------------------------------------------------------------------------------- /YRecycleview/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 22 | 23 | 26 | 27 | 30 | 31 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /YRecycleview/app/src/main/java/cn/yu/yuan/AddHeadViewActivity.java: -------------------------------------------------------------------------------- 1 | package cn.yu.yuan; 2 | 3 | import android.os.Bundle; 4 | import android.os.Handler; 5 | import android.support.annotation.Nullable; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.support.v7.widget.LinearLayoutManager; 8 | import android.view.View; 9 | 10 | import java.util.ArrayList; 11 | 12 | import yuan.kuo.yu.view.YRecyclerView; 13 | 14 | /** 15 | * Created by yukuoyuan on 2017/5/26. 16 | * 这是一个列表添加头布局 17 | */ 18 | public class AddHeadViewActivity extends AppCompatActivity implements YRecyclerView.OnRefreshAndLoadMoreListener { 19 | 20 | private YRecyclerView rcv_empty_view; 21 | private ArrayList arrayList = new ArrayList<>(); 22 | private DemoAdapter demoAdapter; 23 | 24 | @Override 25 | protected void onCreate(@Nullable Bundle savedInstanceState) { 26 | super.onCreate(savedInstanceState); 27 | setContentView(R.layout.activity_empty_view); 28 | rcv_empty_view = (YRecyclerView) findViewById(R.id.rcv_empty_view); 29 | rcv_empty_view.setLayoutManager(new LinearLayoutManager(this)); 30 | 31 | View headView = View.inflate(this, R.layout.head_custom, null); 32 | rcv_empty_view.addHeadView(headView); 33 | demoAdapter = new DemoAdapter(arrayList); 34 | rcv_empty_view.setAdapter(demoAdapter); 35 | rcv_empty_view.setRefreshAndLoadMoreListener(this); 36 | rcv_empty_view.showLoadingEmptyView("没数据,等着吧"); 37 | } 38 | 39 | @Override 40 | public void onRefresh() { 41 | new Handler().postDelayed(new Runnable() { 42 | public void run() { 43 | rcv_empty_view.setLoadingEmptyViewGone(); 44 | demoAdapter.addReFreshData(); 45 | rcv_empty_view.setReFreshComplete(); 46 | } 47 | }, 2500); 48 | } 49 | 50 | @Override 51 | public void onLoadMore() { 52 | new Handler().postDelayed(new Runnable() { 53 | public void run() { 54 | demoAdapter.addRLoadMOreData(); 55 | rcv_empty_view.setReFreshComplete(); 56 | } 57 | }, 2500); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /YRecycleview/app/src/main/java/cn/yu/yuan/DemoAdapter.java: -------------------------------------------------------------------------------- 1 | package cn.yu.yuan; 2 | 3 | import android.support.v7.widget.RecyclerView; 4 | import android.view.View; 5 | import android.view.ViewGroup; 6 | import android.widget.TextView; 7 | 8 | import java.util.ArrayList; 9 | import java.util.List; 10 | 11 | /** 12 | * Created by yukuo on 2016/4/30. 13 | */ 14 | public class DemoAdapter extends RecyclerView.Adapter { 15 | private List list = new ArrayList<>(); 16 | 17 | public DemoAdapter(List list) { 18 | this.list = list; 19 | } 20 | 21 | public void addReFreshData() { 22 | list.add(0,"添加刷新数据"); 23 | notifyDataSetChanged(); 24 | } 25 | 26 | public void addRLoadMOreData() { 27 | list.add("添加加载更多数据"); 28 | notifyDataSetChanged(); 29 | } 30 | 31 | @Override 32 | public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { 33 | View view = View.inflate(parent.getContext(), R.layout.item, null); 34 | return new MyHolder(view); 35 | } 36 | 37 | @Override 38 | public void onBindViewHolder(MyHolder holder, int position) { 39 | holder.tv_item.setText(list.get(position)); 40 | } 41 | 42 | @Override 43 | public int getItemCount() { 44 | return list.size(); 45 | } 46 | 47 | class MyHolder extends RecyclerView.ViewHolder { 48 | 49 | private final TextView tv_item; 50 | 51 | public MyHolder(View itemView) { 52 | super(itemView); 53 | tv_item = (TextView) itemView.findViewById(R.id.tv_item); 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /YRecycleview/app/src/main/java/cn/yu/yuan/DemoSwipeAdapter.java: -------------------------------------------------------------------------------- 1 | package cn.yu.yuan; 2 | 3 | import android.support.v7.widget.RecyclerView; 4 | import android.view.View; 5 | import android.view.ViewGroup; 6 | import android.widget.TextView; 7 | import android.widget.Toast; 8 | 9 | import com.daimajia.swipe.SwipeLayout; 10 | 11 | import java.util.ArrayList; 12 | import java.util.List; 13 | 14 | /** 15 | * Created by yukuo on 2016/4/30. 16 | * 这是一个测试带有侧滑删除的列表适配器 17 | */ 18 | public class DemoSwipeAdapter extends RecyclerView.Adapter { 19 | private List list = new ArrayList<>(); 20 | 21 | public DemoSwipeAdapter(List list) { 22 | this.list = list; 23 | } 24 | 25 | public void addReFreshData() { 26 | SwipeDate swipeDate = new SwipeDate(); 27 | swipeDate.name = "添加刷新数据"; 28 | swipeDate.type = 0; 29 | list.add(0, swipeDate); 30 | notifyDataSetChanged(); 31 | } 32 | 33 | public void addRLoadMOreData() { 34 | SwipeDate swipeDate = new SwipeDate(); 35 | swipeDate.name = "添加加载更多数据"; 36 | swipeDate.type = 0; 37 | list.add(list.size(), swipeDate); 38 | notifyDataSetChanged(); 39 | } 40 | 41 | /** 42 | * 删除一个数据的方法 43 | * 44 | * @param position 索引 45 | */ 46 | public void removeData(int position) { 47 | // TODO 使用刷新单一个条目会出现问题,所以请不要使用 48 | list.remove(position); 49 | notifyDataSetChanged(); 50 | } 51 | 52 | @Override 53 | public int getItemViewType(int position) { 54 | return list.get(position).type; 55 | } 56 | 57 | @Override 58 | public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 59 | View view; 60 | if (viewType == 1) { 61 | view = View.inflate(parent.getContext(), R.layout.item_swipe_menu, null); 62 | return new MySwipeMenuHolder(view); 63 | } else { 64 | view = View.inflate(parent.getContext(), R.layout.item_content, null); 65 | return new MyHolder(view); 66 | } 67 | } 68 | 69 | @Override 70 | public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { 71 | if (holder instanceof MyHolder) { 72 | MyHolder myHolder = (MyHolder) holder; 73 | myHolder.item_content.setText(list.get(position).name); 74 | } else if (holder instanceof MySwipeMenuHolder) { 75 | final MySwipeMenuHolder myHolders = (MySwipeMenuHolder) holder; 76 | myHolders.item_content.setText(list.get(position).name + "######" + position); 77 | myHolders.item_content.setOnClickListener(new View.OnClickListener() { 78 | @Override 79 | public void onClick(View v) { 80 | Toast.makeText(v.getContext(), list.get(position).name, Toast.LENGTH_SHORT).show(); 81 | } 82 | }); 83 | myHolders.delete.setOnClickListener(new View.OnClickListener() { 84 | @Override 85 | public void onClick(View v) { 86 | removeData(position); 87 | } 88 | }); 89 | } 90 | } 91 | 92 | @Override 93 | public int getItemCount() { 94 | return list.size(); 95 | } 96 | 97 | class MyHolder extends RecyclerView.ViewHolder { 98 | 99 | private final TextView item_content; 100 | 101 | public MyHolder(View itemView) { 102 | super(itemView); 103 | item_content = (TextView) itemView.findViewById(R.id.item_content); 104 | } 105 | } 106 | 107 | class MySwipeMenuHolder extends RecyclerView.ViewHolder { 108 | private final TextView delete; 109 | private final TextView ok; 110 | private final TextView item_content; 111 | private final SwipeLayout srl_item; 112 | 113 | public MySwipeMenuHolder(View itemView) { 114 | super(itemView); 115 | item_content = (TextView) itemView.findViewById(R.id.item_content); 116 | srl_item = (SwipeLayout) itemView.findViewById(R.id.srl_item); 117 | delete = (TextView) itemView.findViewById(R.id.delete); 118 | ok = (TextView) itemView.findViewById(R.id.ok); 119 | } 120 | } 121 | } 122 | -------------------------------------------------------------------------------- /YRecycleview/app/src/main/java/cn/yu/yuan/LoadMoreAndRefreshActivity.java: -------------------------------------------------------------------------------- 1 | package cn.yu.yuan; 2 | 3 | import android.os.Bundle; 4 | import android.os.Handler; 5 | import android.support.annotation.Nullable; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.support.v7.widget.LinearLayoutManager; 8 | import android.util.Log; 9 | 10 | import java.util.ArrayList; 11 | import java.util.List; 12 | 13 | import yuan.kuo.yu.view.YRecyclerView; 14 | 15 | /** 16 | * Created by yukuoyuan on 2017/3/25. 17 | * 这是一个测试上啦刷新下拉加载更多的界面 18 | */ 19 | public class LoadMoreAndRefreshActivity extends AppCompatActivity { 20 | private List list = new ArrayList<>(); 21 | private YRecyclerView ycl; 22 | 23 | 24 | @Override 25 | protected void onCreate(@Nullable Bundle savedInstanceState) { 26 | super.onCreate(savedInstanceState); 27 | setContentView(R.layout.activity_loadmore_refresh); 28 | ycl = (YRecyclerView) findViewById(R.id.ycl); 29 | initData(); 30 | } 31 | 32 | private void initData() { 33 | for (int i = 0; i < 20; i++) { 34 | list.add("于" + i); 35 | } 36 | final DemoAdapter demoAdapter = new DemoAdapter(list); 37 | ycl.setLayoutManager(new LinearLayoutManager(this)); 38 | ycl.setAdapter(demoAdapter); 39 | ycl.setRefreshAndLoadMoreListener(new YRecyclerView.OnRefreshAndLoadMoreListener() { 40 | @Override 41 | public void onRefresh() { 42 | new Handler().postDelayed(new Runnable() { 43 | public void run() { 44 | demoAdapter.addReFreshData(); 45 | ycl.setReFreshComplete(); 46 | } 47 | }, 2500); 48 | } 49 | 50 | @Override 51 | public void onLoadMore() { 52 | Log.i("加载更多", "000"); 53 | new Handler().postDelayed(new Runnable() { 54 | public void run() { 55 | demoAdapter.addRLoadMOreData(); 56 | ycl.setloadMoreComplete(); 57 | } 58 | }, 2500); 59 | } 60 | }); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /YRecycleview/app/src/main/java/cn/yu/yuan/LoadingEmptyViewActivity.java: -------------------------------------------------------------------------------- 1 | package cn.yu.yuan; 2 | 3 | import android.os.Bundle; 4 | import android.os.Handler; 5 | import android.support.annotation.Nullable; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.support.v7.widget.LinearLayoutManager; 8 | 9 | import java.util.ArrayList; 10 | 11 | import yuan.kuo.yu.view.YRecyclerView; 12 | 13 | /** 14 | * Created by yukuoyuan on 2017/5/26. 15 | * 这是一个可下拉刷新加载更多的空布局界面 16 | */ 17 | public class LoadingEmptyViewActivity extends AppCompatActivity implements YRecyclerView.OnRefreshAndLoadMoreListener { 18 | 19 | private YRecyclerView rcv_loading_empty_view; 20 | private ArrayList arrayList = new ArrayList<>(); 21 | private DemoAdapter demoAdapter; 22 | 23 | @Override 24 | protected void onCreate(@Nullable Bundle savedInstanceState) { 25 | super.onCreate(savedInstanceState); 26 | setContentView(R.layout.activity_loading_empty_view); 27 | rcv_loading_empty_view = (YRecyclerView) findViewById(R.id.rcv_loading_empty_view); 28 | rcv_loading_empty_view.setLayoutManager(new LinearLayoutManager(this)); 29 | rcv_loading_empty_view.showLoadingEmptyView("稍等哦亲!暂无数据~"); 30 | demoAdapter = new DemoAdapter(arrayList); 31 | rcv_loading_empty_view.setAdapter(demoAdapter); 32 | rcv_loading_empty_view.setRefreshAndLoadMoreListener(this); 33 | } 34 | 35 | @Override 36 | public void onRefresh() { 37 | new Handler().postDelayed(new Runnable() { 38 | @Override 39 | public void run() { 40 | demoAdapter.addReFreshData(); 41 | rcv_loading_empty_view.setReFreshComplete(); 42 | rcv_loading_empty_view.setLoadingEmptyViewGone(); 43 | } 44 | }, 2500); 45 | } 46 | 47 | @Override 48 | public void onLoadMore() { 49 | new Handler().postDelayed(new Runnable() { 50 | @Override 51 | public void run() { 52 | demoAdapter.addRLoadMOreData(); 53 | rcv_loading_empty_view.reSetStatus(); 54 | } 55 | }, 2500); 56 | 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /YRecycleview/app/src/main/java/cn/yu/yuan/MainActivity.java: -------------------------------------------------------------------------------- 1 | package cn.yu.yuan; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.view.View; 7 | import android.widget.Button; 8 | 9 | public class MainActivity extends AppCompatActivity implements View.OnClickListener { 10 | 11 | private Button bt_load_more_refresh; 12 | private Button bt_load_more_refresh_swipe; 13 | private Intent intent; 14 | private Button bt_set_empty_view; 15 | private Button bt_set_loading_empty_view; 16 | 17 | @Override 18 | protected void onCreate(Bundle savedInstanceState) { 19 | super.onCreate(savedInstanceState); 20 | setContentView(R.layout.activity_main); 21 | bt_load_more_refresh = (Button) findViewById(R.id.bt_load_more_refresh); 22 | bt_load_more_refresh_swipe = (Button) findViewById(R.id.bt_load_more_refresh_swipe); 23 | bt_set_empty_view = (Button) findViewById(R.id.bt_set_empty_view); 24 | bt_set_loading_empty_view = (Button) findViewById(R.id.bt_set_loading_empty_view); 25 | bt_load_more_refresh.setOnClickListener(this); 26 | bt_load_more_refresh_swipe.setOnClickListener(this); 27 | bt_set_empty_view.setOnClickListener(this); 28 | bt_set_loading_empty_view.setOnClickListener(this); 29 | } 30 | 31 | @Override 32 | public void onClick(View v) { 33 | switch (v.getId()) { 34 | case R.id.bt_load_more_refresh: 35 | intent = new Intent(MainActivity.this, LoadMoreAndRefreshActivity.class); 36 | startActivity(intent); 37 | break; 38 | case R.id.bt_load_more_refresh_swipe: 39 | intent = new Intent(MainActivity.this, SwipeLoadMoreAndRefreshActivity.class); 40 | startActivity(intent); 41 | break; 42 | case R.id.bt_set_empty_view: 43 | intent = new Intent(MainActivity.this, AddHeadViewActivity.class); 44 | startActivity(intent); 45 | break; 46 | case R.id.bt_set_loading_empty_view: 47 | intent = new Intent(MainActivity.this, LoadingEmptyViewActivity.class); 48 | startActivity(intent); 49 | break; 50 | default: 51 | break; 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /YRecycleview/app/src/main/java/cn/yu/yuan/SwipeDate.java: -------------------------------------------------------------------------------- 1 | package cn.yu.yuan; 2 | 3 | /** 4 | * Created by yukuoyuan on 2017/3/25. 5 | */ 6 | 7 | public class SwipeDate { 8 | public int type; 9 | public String name; 10 | } 11 | -------------------------------------------------------------------------------- /YRecycleview/app/src/main/java/cn/yu/yuan/SwipeLoadMoreAndRefreshActivity.java: -------------------------------------------------------------------------------- 1 | package cn.yu.yuan; 2 | 3 | import android.os.Bundle; 4 | import android.os.Handler; 5 | import android.support.annotation.Nullable; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.support.v7.widget.LinearLayoutManager; 8 | import android.util.Log; 9 | 10 | import java.util.ArrayList; 11 | import java.util.List; 12 | 13 | import yuan.kuo.yu.view.YRecyclerView; 14 | 15 | /** 16 | * Created by yukuoyuan on 2017/3/25. 17 | * 这是一个测试上啦刷新,下拉加载更多的界面 18 | */ 19 | public class SwipeLoadMoreAndRefreshActivity extends AppCompatActivity { 20 | private List list = new ArrayList<>(); 21 | private YRecyclerView ycl; 22 | 23 | @Override 24 | protected void onCreate(@Nullable Bundle savedInstanceState) { 25 | super.onCreate(savedInstanceState); 26 | setContentView(R.layout.activity_loadmore_refresh); 27 | ycl = (YRecyclerView) findViewById(R.id.ycl); 28 | initData(); 29 | } 30 | 31 | private void initData() { 32 | for (int i = 0; i < 20; i++) { 33 | SwipeDate swipeDate = new SwipeDate(); 34 | swipeDate.name = "于" + i; 35 | swipeDate.type = 1; 36 | list.add(swipeDate); 37 | } 38 | final DemoSwipeAdapter demoAdapter = new DemoSwipeAdapter(list); 39 | ycl.setLayoutManager(new LinearLayoutManager(this)); 40 | ycl.setAdapter(demoAdapter); 41 | ycl.setRefreshAndLoadMoreListener(new YRecyclerView.OnRefreshAndLoadMoreListener() { 42 | @Override 43 | public void onRefresh() { 44 | new Handler().postDelayed(new Runnable() { 45 | public void run() { 46 | demoAdapter.addReFreshData(); 47 | ycl.setReFreshComplete(); 48 | } 49 | }, 2500); 50 | } 51 | 52 | @Override 53 | public void onLoadMore() { 54 | Log.i("加载更多", "000"); 55 | new Handler().postDelayed(new Runnable() { 56 | public void run() { 57 | demoAdapter.addRLoadMOreData(); 58 | ycl.setloadMoreComplete(); 59 | } 60 | }, 2500); 61 | } 62 | }); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /YRecycleview/app/src/main/res/layout/activity_empty_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 19 | -------------------------------------------------------------------------------- /YRecycleview/app/src/main/res/layout/activity_loading_empty_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | -------------------------------------------------------------------------------- /YRecycleview/app/src/main/res/layout/activity_loadmore_refresh.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | -------------------------------------------------------------------------------- /YRecycleview/app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 |