1. 名称:
    XRecyclerView
  2. 作者:
    站长老左
  3. 来源:
  4. 浏览:
    19461
  5. 下载:
    2395
  6. 最新更新:
    2015-12-06
  7. 收藏2
实例演示

介绍:

一个实现了下拉刷新,滚动到底部加载更多以及添加header功能的的RecyclerView。使用方式和RecyclerView完全一致,不需要额外的layout,不需要写特殊的adater。 加载效果内置了AVLoadingIndicatorView上的所有效果,可以根据需要指定。


项目地址:https://github.com/jianghejie/XRecyclerView


效果:


使用:

  1. xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
 
    <com.jcodecraeer.xrecyclerview.XRecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
 
</RelativeLayout>


2.MainActivity

package com.example.xrecyclerview;
 
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
 
import com.jcodecraeer.xrecyclerview.ProgressStyle;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
 
import java.util.ArrayList;
 
public class MainActivity extends AppCompatActivity {
    private XRecyclerView mRecyclerView;
    private MyAdapter mAdapter;
    private ArrayList<String> listData;
    private int refreshTime = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRecyclerView = (XRecyclerView)this.findViewById(R.id.recyclerview);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        mRecyclerView.setLayoutManager(layoutManager);
 
        mRecyclerView.setRefreshProgressStyle(ProgressStyle.BallSpinFadeLoader);
        mRecyclerView.setLaodingMoreProgressStyle(ProgressStyle.Pacman);
        mRecyclerView.setArrowImageView(R.drawable.iconfont_downgrey);
 
        View header =   LayoutInflater.from(this).inflate(R.layout.recyclerview_header, (ViewGroup)findViewById(android.R.id.content),false);
        mRecyclerView.addHeaderView(header);
 
 
        mRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {
                refreshTime ++;
                new Handler().postDelayed(new Runnable(){
                    public void run() {
                        listData.clear();
                        for(int i = 0; i < 15 ;i++){
                            listData.add("item" + i + "after " + refreshTime + " times of refresh");
                        }
                        mAdapter.notifyDataSetChanged();
                        mRecyclerView.refreshComplete();
                    }
 
                }, 3000);            //refresh data here
            }
 
            @Override
            public void onLoadMore() {
                new Handler().postDelayed(new Runnable(){
                    public void run() {
                        for(int i = 0; i < 15 ;i++){
                            listData.add("item" + (i + listData.size()) );
                        }
                        mAdapter.notifyDataSetChanged();
                        mRecyclerView.loadMoreComplete();
                    }
                }, 3000);
 
            }
        });
 
        listData = new  ArrayList<String>();
        mAdapter = new MyAdapter(listData);
        for(int i = 0; i < 15 ;i++){
            listData.add("item" + i);
        }
        mRecyclerView.setAdapter(mAdapter);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
 
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
 
        return super.onOptionsItemSelected(item);
    }
 
 
}

3. adapter

package com.example.xrecyclerview;
 
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;
 
/**
 * Created by jianghejie on 15/11/26.
 */
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    public ArrayList<String> datas = null;
    public MyAdapter(ArrayList<String> datas) {
        this.datas = datas;
    }
    //创建新View,被LayoutManager所调用
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item,viewGroup,false);
        ViewHolder vh = new ViewHolder(view);
        return vh;
    }
    //将数据与界面进行绑定的操作
    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int position) {
        viewHolder.mTextView.setText(datas.get(position));
    }
    //获取数据的数量
    @Override
    public int getItemCount() {
        return datas.size();
    }
    //自定义的ViewHolder,持有每个Item的的所有界面元素
    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView mTextView;
        public ViewHolder(View view){
            super(view);
            mTextView = (TextView) view.findViewById(R.id.text);
        }
    }
}


共0 条评论
  1. 加载评论

评论内容:

发表评论
  1. 全部组件分类
  2. 日历组件(calendar)
  3. swipeback组件
  4. 筛选器(filter)
  5. 分享组件(share)
  6. 气泡(tip)
  7. 开关(switch)
  8. 载入视图(loader)
  9. 列表(listview)
  10. 图片(ImageView)
  11. 分段选择( segment)
  12. 选项卡(tab)
  13. 按钮(button)
  14. 单选按钮(RadioButton)
  15. 进度条(Progressbar)
  16. 对话框(dialog)
  17. 菜单(menu)
  18. 图案解锁(GustureLock)
  19. 布局(layout)
  20. 图表(chart)
  21. 指示器(Indicator)
  22. 通知(toast)
  23. 步骤控件(stepsView)
  24. 文本编辑框(edittext)
  25. 引导页( GuideView)
  26. ViewPager(viewpager)
  27. 富文本编辑器(richeditor)
  28. 标签控件(tagview)
  29. 画廊控件(Gallery)
  30. Material Design风格
  31. 涂鸦板(Graffiti board)
  32. 动画(Animation)
  33. 选择器(Picker)
  34. 手势交互(Gesture)
  35. 拖动条(SeekBar)
  36. 文本显示(TextView)
  37. 特效
  38. 视图切换(View Transition)
  39. 水流波动效果(WaveView)
  40. 徽章控件(BadgeView)
  41. 拖动排序
  42. 下拉缩放(PullZoom)
  43. 浮动按钮(Floating Button)
  44. 显示gif图片(GifImageView)
  45. 星级评分控件(StarBar)
  46. 刮奖效果
  47. 弹幕效果
  48. win8磁贴效果
  49. 备忘录
  50. 下拉列表
  51. 自动搜索(SearchBox)
  52. 马赛克效果
  53. 广告轮播效果
  54. 应用模仿
  55. 二维码
  56. 检测年龄
  57. 图片裁剪
  58. 瀑布流
  59. 拖动效果
  60. 粒子效果
  61. 翻书效果
  62. 时间轴(TimeLine)
  63. 分享效果
  64. 下拉刷新
  65. 表情控件(Emoji)
  66. 人脸检测
  67. 抽奖转盘
  68. 框架
  69. 点赞效果
  70. 新闻滚动
  71. 数字滚动
  72. 侧滑菜单
  73. 广告控件
  74. 弹性、粘性效果
  75. 范围、定值选择器
  76. 滑动删除
  77. 分享弹框
  78. snackbar
  79. 主题框架
  80. 浮动按钮、菜单
  81. 投票效果
  82. 九宫格控件
  83. 导航栏停留
  84. 播放器
  85. 购物车动画
  86. 滑动确认
  87. 下单按钮
  88. 数据载入布局(DataLoadingLayout)
  89. CheckBox
  90. Markdown
  91. 滑动验证码
  92. 应用更新库
  93. 断点下载
  94. 指纹识别
  95. 桌面
  96. 图片查看器
  97. 沉浸式
  98. 工具
  99. wheelpicker
  100. Toolbar
  101. 其他
  102. 折叠、展开效果
  103. 直播框架
  104. 树形控件(treeview)
  105. 地图(map)
  106. Kotlin应用
  107. VR
  108. 游戏
  109. 调试工具
  110. VA(虚拟化引擎)
  111. 日志框架
  112. UI框架
  113. 蓝牙框架
  114. 音视频工具
  115. 数字密码
  116. 截屏
  117. USB通讯
  118. 贝塞尔曲线
  119. 3D效果
  120. 组件化
  121. 消息总线
  122. 水印
  123. 堆叠标签(StackLabel)
  124. 骨架屏(Skeleton Screen)
  125. 视频会议
  126. IM即时通讯
  127. 路由
  128. 崩溃捕获