Recyclerview的一些个人理解与使用(六)Recyclerview的分段加载

来源:互联网 发布:淘宝上能买到的黑科技 编辑:程序博客网 时间:2024/06/06 05:58

目录:
Recyclerview的一些个人理解与使用(一)adapter的简单封装
Recyclerview的一些个人理解与使用(二)实现一个简单的列表界面
Recyclerview的一些个人理解与使用(三)列表中的计时器
Recyclerview的一些个人理解与使用(四)在界面中实现侧边栏效果
Recyclerview的一些个人理解与使用(五)Recyclerview的联动,时间选择的实现
Recyclerview的一些个人理解与使用(六)Recyclerview的分段加载
Recyclerview的一些个人理解与使用(七)Recyclerview的嵌套与增加删除

最近项目在集成IM,用的融云,由于需求的特殊性实现起来比较麻烦,花了一个的时间,差不多就要完成了,近两天也刚好闲了下来,自己想放松一下,也给大家也带来一个很轻松就能实现的功能,照例附上上一篇实现Recyclerview联动博客的网址:

http://blog.csdn.net/ljwztn/article/details/71209543

这个功能主要是为了解决某些复杂的Recyclerview整体绘制过慢的问题,试想如果一个界面需要很长时间的绘制才能加载出来,无疑是影响用户体验,通过Recyclerview的分段加载,我们让item依次绘制并展示到用户眼前,这样子的交互就比较由好了。因为这只是一个demo,我没有制造一个复杂的界面让它去加载,只是简单的实现了这个功能,大家可以根据自己项目的实际需求看是否需要使用。先上图
这里写图片描述

代码也很简单,使用 Timmer 类开始任务,在 handler 中更新 UI,因为adapter直接用的开始最简单的adapter,就不贴了,Activity代码如下;

/** * Created by ztn on 2017/6/8 * 分段加载Recyclerview */public class SubsectionRecyclerViewActivity extends BaseActivity {    List<String> time;    MainRecyclerViewAdapter mainRecyclerViewAdapter;    SimpleDateFormat formatter;    Timer timer;    SubsectionRecyclerViewActivityHolder subsectionRecyclerViewActivityHolder;    public static Intent newIntent(Context context) {        return new Intent(context, SubsectionRecyclerViewActivity.class);    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        subsectionRecyclerViewActivityHolder = new SubsectionRecyclerViewActivityHolder(this);        formatter = new SimpleDateFormat("yyyy年MM月dd日    HH:mm:ss", Locale.CHINA);        time = new ArrayList<>();        time.add(formatter.format(System.currentTimeMillis()));        mainRecyclerViewAdapter = new MainRecyclerViewAdapter(getContext(), time);        subsectionRecyclerViewActivityHolder.recyclerView.setAdapter(mainRecyclerViewAdapter);        timer = new Timer();        //0.5秒后执行任务,根据实际需求放在合适的位置,如加载的数据是网络数据,应该放在网络数据加载成功后执行        timer.schedule(new TimerTask() {            @Override            public void run() {                handler.sendEmptyMessage(1);            }        }, 500, 500);    }    Handler handler = new Handler(new Handler.Callback() {        @Override        public boolean handleMessage(Message msg) {            switch (msg.what) {                case 1:                    //加载20条数据,实际根据data的size定                    if (time.size() < 20) {                        time.add(formatter.format(System.currentTimeMillis()));                        mainRecyclerViewAdapter.notifyItemChanged(time.size());                    } else {                        //停止                        timer.purge();                    }                    break;                case 2:                    timer.purge();                    break;            }            return false;        }    });}

这里在handler中使用的 time 的 size,而不是任务执行的次数,因为有些界面绘制的时间可能不0.5秒还要长,可能导致空指针,直接用 time 的 size 就不会有这个问题了。
项目地址:

https://github.com/Liveinadream/RecyclerViewDemo#recyclerviewdemo

如有疑问大家可以添加 121606151 这个qq群@Crazy(即本人)即可,欢迎大家前来交流。

阅读全文
2 0
原创粉丝点击