recyclerview + 置顶 + swiperefreshlayout

refresh+recyclerview+置顶按钮

最近公司的一个项目在做版本界面的全新升级,控件全部替换成了现在最新的,例如recyclerview,以及floatactionbutton,刷新控件用了谷歌的refreshlayout,本人觉得这个单色的刷新控件还挺好看的。

  • 谷歌的swiperefreshlayout刷新布局
  • recyclerview加载两种不同的布局
  • floatingactionbutton

swiperefreshlayout刷新布局

  • 布局文件
  • java代码

刷新控件用过很多,最早的XListView,pull to refresh等等,谷歌推出这款刷新控件本人认为还是非常好用的,最早是在知乎上看到的纯色转圈的空间按钮,觉得很好看。下面来看看怎么使用吧。
布局文件中

<android.support.v4.widget.SwipeRefreshLayout
                   android:id="@+id/search_result_swiperefresh_layout"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="#EFEFF4">

                    <android.support.v7.widget.RecyclerView
                        android:id="@+id/recyclerView"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:scrollbars="vertical" />
</android.support.v4.widget.SwipeRefreshLayout>

以上是在layout布局文件中的使用,一般来说,refreshlayout中可以嵌套一个recyclerview或者listview这种。
官方推出的是跑马灯样式的彩条,在这里我用的是知乎那种纯色转圈的刷新按钮,所以在这里只用了一个颜色。

 swipeRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_light);        
 swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {

        @Override
        public void onRefresh() {
  //        refreshData(adapter);
            mTaskListPresenter.synchronizeData();
        }
    });

recyclerview加载两种布局

recyclerview个人认为很好用,去年推出的控件,可以替代listview和gridview。有一些监听很好用。

recyclerview配合使用的就是其适配器了。


 @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            if (viewType != loading) {
                View view = LayoutInflater.from(mContext).inflate(R.layout.item_task_list_row_layout, parent, false);
                return new ViewHolder(view);
            } else {
                View view = LayoutInflater.from(mContext).inflate(R.layout.item_task_list_row_loading, parent, false);
                return new LoadingViewHolder(view);
            }
        }

在这里去创建viewholder的时候要进行 if 条件的判断,根据viewType来判断,我这边加载的是两种布局,一种是显示的信息,另外一种布局就是loading布局,显示“正在加载中”携带progressbar的item布局。
而控制加载不同布局的核心就是重写一个方法:


 @Override
        public int getItemViewType(int position) {
            if (mlist.get(position) != null) {
                return super.getItemViewType(position);
            } else {
                return loading;
            }
        }

置顶按钮floatingactionbutton

置顶按钮这边没什么好说的,主要就是和recyclerview配合起来使用,在这里我们项目需要实现的功能就是recyclerview滚动的时候,置顶按钮需要隐藏,停止滑动,置顶按钮可见,这里主要就是依靠于recyclerview的滚动监听来实现,再去控制置顶按钮的visible or gone。

 <android.support.design.widget.FloatingActionButton
                android:id="@+id/fab"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="bottom|end"
                android:layout_margin="16dp"
                android:src="@mipmap/ic_favorite_outline_white_24dp"
                android:visibility="gone" />

        //置顶按钮
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                recyclerView.smoothScrollToPosition(0);//滑到顶部
            }
        });

以上就是置顶按钮的功能,让recyclerview滑动到集合索引为0的地方。


final LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();
        //recyclerview添加滚动监听
        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                int firstItemPosition = manager.findFirstVisibleItemPosition();
                if (firstItemPosition > 10 && newState == 0) {
                    fab.setVisibility(View.VISIBLE);
                } else {
                    fab.setVisibility(View.GONE);
                }
            }

以上代码就是控制recyclerview滑动的时候,置顶按钮隐藏,停止不可见。
其中newState为0就是静止状态。

注意:如需转载请注明出处。
作为新人,以后会每星期都至少发表一篇博客,以此来总结自己的学习开发之路。多谢捧场!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值