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就是静止状态。
注意:如需转载请注明出处。
作为新人,以后会每星期都至少发表一篇博客,以此来总结自己的学习开发之路。多谢捧场!