怎样实现SwipeRefreshLayout的怎样让网页自动刷新新

当你的才华还撑不起你的梦想时,你只能一直前进!
可能开发安卓的人大多数都用过很多下拉刷新的开源组件,但是今天用了官方v4支持包的SwipeRefreshLayout觉得效果也蛮不错的,特拿出来分享。
简介:SwipeRefreshLayout组件只接受一个子组件:即需要刷新的那个组件。它使用一个侦听机制来通知拥有该组件的监听器有刷新事件发生,换句话说我们的Activity必须实现通知的接口。该Activity负责处理事件刷新和刷新相应的视图。一旦监听者接收到该事件,就决定了刷新过程中应处理的地方。如果要展示一个&刷新动画&,它必须调用setRefrshing(true),否则取消动画就调用setRefreshing(false)。
并且这个东西只支持下拉刷新,大家可以自定义View继承它实现你的上拉加载。
怎样使用SwipeRefreshLayout:使用起来非常简单。下面将用一个实例展示如何使用官方这个下拉刷新控件,末尾我还模仿虚拟实现了一个小的上拉加载效果,可以供大家向上分析。
上点代码:
activity_main.xml
&?xml version="1.0" encoding="utf-8"?&
&RelativeLayout
xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.nanchen.swiperefreshlayoutdemo.MainActivity"&
&android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/main_srl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"&
android:id="@+id/main_lv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"&
&/ListView&
&/android.support.v4.widget.SwipeRefreshLayout&
&/RelativeLayout&
menu_layout.xml
&?xml version="1.0" encoding="utf-8"?&
&LinearLayout xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"&
&ProgressBar
style="?android:attr/progressBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/progressBar"/&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="正在玩命加载中...."
android:id="@+id/textView2"/&
&/LinearLayout&
  MainActivity.java
package com.example.nanchen.sw
import android.os.B
import android.os.H
import android.os.M
import android.support.v4.widget.SwipeRefreshL
import android.support.v7.app.AppCompatA
import android.view.V
import android.widget.AbsListV
import android.widget.ArrayA
import android.widget.ListV
import java.util.ArrayL
import java.util.A
import java.util.L
public class MainActivity extends AppCompatActivity implements AbsListView.OnScrollListener {
private SwipeRefreshLayout swipeRefreshL
private ListV
private ArrayA
private List&String&
private View footerV
private Handler handler = new Handler(){
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 0x101:
if (swipeRefreshLayout.isRefreshing()){
adapter.notifyDataSetChanged();
swipeRefreshLayout.setRefreshing(false);//设置不刷新
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.main_srl);
lv = (ListView) findViewById(R.id.main_lv);
footerView = getLayoutInflater().inflate(R.layout.loading_layout,null);
lv.addFooterView(footerView);
lv.setOnScrollListener(this);
list = new ArrayList&&();
list.addAll(Arrays.asList("Java","php","C++","C#","IOS","html","C","J2ee","j2se","VB",".net","Http","tcp","udp","www"));
adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,
android.R.id.text1,list);
lv.setAdapter(adapter);
swipeRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_bright, android.R.color.holo_green_light,
android.R.color.holo_orange_light, android.R.color.holo_red_light);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
public void onRefresh() {
new LoadDataThread().start();
private int visibleLastI//用来可显示的最后一条数据的索引
public void onScrollStateChanged(AbsListView view, int scrollState) {
if(adapter.getCount() == visibleLastIndex && scrollState == SCROLL_STATE_IDLE){
new LoadDataThread().start();
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
visibleLastIndex = firstVisibleItem + visibleItemCount - 1;//减去最后一个加载中那条
* 模拟加载数据的线程
class LoadDataThread extends
public void run() {
initData();
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
handler.sendEmptyMessage(0x101);//通过handler发送一个更新数据的标记
private void initData() {
list.addAll(Arrays.asList("Json","XML","UDP","http"));
阅读(...) 评论()
写不完的矫情,做不完的开源
优美钢琴曲合集-南尘.mp3                    感谢您阅读我的博客,如果您现在工作、学习累了或者疲惫了,不妨聆听一下音乐,它能够减轻你的疲劳,还能够带给您一种舒适愉悦的心情。(样式取自博客园-欲泪成雪)看到了Android版知乎实现了这种效果,就自己也实现了一下。
先来一张效果图
实现方式:
①在onWindowFocusChanged()方法中,设置为刷新状态为true
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
mSwipeRefreshLayout.setRefreshing(true);
②在获取数据完成后设置刷新状态为false
if (mSwipeRefreshLayout.isRefreshing()) {
mSwipeRefreshLayout.setRefreshing(false);
①调用mSwipeRefreshLayout.measure()方法后,设置刷新状态为true
//手动调用,通知系统去测量
mSwipeRefreshLayout.measure(0,0);
mSwipeRefreshLayout.setRefreshing(true);
②在获取数据完成后设置刷新状态为false
if (mSwipeRefreshLayout.isRefreshing()) {
mSwipeRefreshLayout.setRefreshing(false);
方法一和方法二的第一步的目的,都是为了在SwipeRefreshLayout绘制完成之后,再设置刷新状态为true,否则大多数情况下,SwipeRefreshLayout刷新球会不显示。
package org.raphets.sw
import android.graphics.C
import android.support.v4.widget.SwipeRefreshL
import android.support.v7.app.AppCompatA
import android.os.B
import android.util.L
import android.widget.TextV
public class MainActivity extends AppCompatActivity {
private SwipeRefreshLayout mSwipeRefreshL
private TextView mTextV
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.srl);
mTextView = (TextView) findViewById(R.id.tv);
//设置刷新球颜色
mSwipeRefreshLayout.setColorSchemeColors(Color.BLUE, Color.RED, Color.YELLOW);
mSwipeRefreshLayout.setProgressBackgroundColorSchemeColor(Color.parseColor("#BBFFFF"));
//手动调用,通知系统去测量
mSwipeRefreshLayout.measure(0,0);
mSwipeRefreshLayout.setRefreshing(true);
getData();
* 模拟网络请求
private void getData() {
new Thread() {
public void run() {
super.run();
//模拟网络请求
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
//在UI线程中更新UI
runOnUiThread(new Runnable() {
public void run() {
mTextView.setText("首次进入自动刷新");
if (mSwipeRefreshLayout.isRefreshing()) {
mSwipeRefreshLayout.setRefreshing(false);
}.start();
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
mSwipeRefreshLayout.setRefreshing(true);
阅读(...) 评论()RecyclerView+SwipeRefreshLayout实现三种布局上拉加载下拉刷新【android开发吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:117,705贴子:
RecyclerView+SwipeRefreshLayout实现三种布局上拉加载下拉刷新收藏
android系统-让安卓刷机变得更简单,安全,快捷的android系统,搭配全图文刷机教程,全自动安装驱动,新版刷机工具免费下载!
一楼留给大神,致敬。。。
先介绍一下RecyclerView,这个控件我一年之前就听说过了,但一直没去用过,还是跟之前一样,listview,gridview那样去用,直到最近才去真真的了解了一下这个谷歌所谓的不比ListView复杂,反而更灵活好用,它将数据、排列方式、数据的展示方式都分割开来,因此可定制型,自定义的形式也非常多,非常灵活的组件
第一步 androidStudio 导入RecyclerView导入之后大家就可以直接用了
要写 那肯定是先要搞清楚怎么去定义这个组件总不能想咱们写listview一样,直接写,那肯定不行的,像这样就可以了,同时我上面也定义了一层swipeRefresgLayout,是用来添加下拉刷新的
好了 布局定义好之后我们就是寻找组件了,这时候就有了一个关键的东西LayoutManager,这个东西就是关系到你是想让列表listview展示还是gridview展示,或者是瀑布流StaggeredGridLayout展示了,先来看listview展示
public class MainActivity extends Activity {
private RecyclerView recyclerV//一个可以替代listview
gridview的控件
private RecyclerView.LayoutManager layoutM//必须实例化layoutManager
使用它来区分是瀑布流还是listview还是gridview
private RecyclerviewA
//适配器也会发生改变具体请看适配器内容
private List&String&
private ItemTouchHelper mItemTouchH
private LinearLayoutManager
linearLayoutM
//是否正在上拉数据
private boolean loading =
private SwipeRefreshLayout
refreshL//谷歌官方提供的刷新控件下面已做具体注释
private Handler handler=new Handler(){
public void handleMessage(Message msg) {
super.handleMessage(msg);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
private void initView() {
refreshLayout= (SwipeRefreshLayout) findViewById(R.id.refresh_layout);
recyclerView= (RecyclerView) findViewById(R.id.recyclerview_view);
recyclerView.setHasFixedSize(true);
//关联ItemTouchHelper和RecyclerView
linearLayoutManager = new LinearLayoutManager(MainActivity.this);
layoutManager=linearLayoutM
recyclerView.setLayoutManager(layoutManager);
//给recyclerview设置分割线
recyclerView.addItemDecoration(new
DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
private void initData(){
list=new ArrayList&&();
for(int i=1;i&=20;i++){
list.add(&&+i);
//refreshLayout.setColorScheme();//这个方法设置进度条颜色已经弃用
refreshLayout.setColorSchemeResources(R.color.red);//使用新方法来设置它的进度条颜色,最多可设置四种颜色
// refreshLayout.setRefreshing(true);//设置是否隐藏刷新动作
true表示显示,false表示隐藏,默认为true
adapter=new RecyclerviewAdapter(list,MainActivity.this);
refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
public void onRefresh() {
handler.postDelayed(new Runnable() {
public void run() {
adapter.addll(list);
refreshLayout.setRefreshing(false);//设置收起刷新状态
//这里等同于网络数据加载
ItemTouchHelper.Callback callback = new SimpleItemTouchHelperCallback(adapter);
mItemTouchHelper = new ItemTouchHelper(callback);
mItemTouchHelper.attachToRecyclerView(recyclerView);
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int lastVisibleItemPosition =linearLayoutManager.findLastVisibleItemPosition();
if (lastVisibleItemPosition + 1 == adapter.getItemCount()) {
Log.d(&test&, &loading executed&);
boolean isRefreshing = refreshLayout.isRefreshing();
if (isRefreshing) {
adapter.notifyItemRemoved(adapter.getItemCount());
if (!loading) {
setFooterView(recyclerView);
handler.postDelayed(new Runnable() {
public void run() {
adapter.addll(list);
//这里等同于网络操作
Log.d(&test&, &load more completed&);
recyclerView.setAdapter(adapter);
setHeader(recyclerView);
private void setHeader(RecyclerView view) {
View header = LayoutInflater.from(this).inflate(R.layout.layout_header, view, false);
adapter.setHeaderView(header);
private void setFooterView(RecyclerView view) {
View header = LayoutInflater.from(this).inflate(R.layout.layout_foot, view, false);
adapter.setFooterView(header);
上面是设置成listview样式的RecyclerView并且增加了头部和底部视图,和上拉加载
现在是时候看一波适配器代码了,我让listviewg和gridview用一个适配器,然后把瀑布流单独了一个适配器
package com.aykj.import android.content.Cimport android.support.v7.widget.RecyclerVimport android.view.LayoutIimport android.view.Vimport android.view.ViewGimport android.widget.ImageVimport android.widget.TextVimport java.util.Cimport java.util.L/** * 这个就是适配器的代码了.*/public class RecyclerviewAdapter extends RecyclerView.Adapter&RecyclerviewAdapter.MyViewHodler& implements
onMoveAndSwipedListener{
private LayoutI
private List&String&
private View mHeaderV
// 底部控件
private View mFooterV
private boolean isHasHeader =
private boolean isHasFooter =
private int
private int
public static final int TYPE_HEADER = 0;
public static final int TYPE_NORMAL = 1;
public static final int TYPE_FOOTER = 2;
public RecyclerviewAdapter(List&String& list, Context context) {
this.context =
this.list =
inflater = LayoutInflater.from(context);
public MyViewHodler onCreateViewHolder(ViewGroup parent, int viewType) {
//listview中的 getView方法 用于view的复用
View view = inflater.inflate(R.layout.activity_listview, parent, false);
MyViewHodler holder = new MyViewHodler(view);
if (viewType == TYPE_FOOTER) {
// 如果是底部类型,返回底部视图
return new MyViewHodler(mFooterView);
if (viewType == TYPE_HEADER) {
return new MyViewHodler(mHeaderView);
public void onBindViewHolder(MyViewHodler holder, int position) {
//相当于listview适配器中的getitem()方法;
if (isHasHeader && isHasFooter) {
// 有头布局和底部时,向前便宜一个,且最后一个不能绑定数据
if (position == 0 || position == list.size() + 1) {
final int pos = getRealPosition(holder);
String data =list.get(pos);
if (holder instanceof MyViewHodler) {
holder.textView.setText(data);
public int getRealPosition(RecyclerView.ViewHolder holder) {
if (isHasHeader = true) {
int position = holder.getLayoutPosition();
return mHeaderView == null ? position : position - 1;
if (isHasFooter = true) {
int position = holder.getLayoutPosition();
return mFooterView == null ? position : position + 1;
void addll(List&String& data){
this.list.addAll(data);
notifyDataSetChanged();
protected boolean isHeadher(int
position){
header!=0 && position &
protected boolean isFooter(int
position){
foot!=0 && position &=getItemCount()-1;
public int getItemCount() {
int size = list.size();
if (isHasFooter)
if (isHasHeader)
public void setHeaderView(View headerView) {
mHeaderView = headerV
isHasHeader =
notifyItemInserted(0);
* 添加底部视图
public void setFooterView(View footer) {
mFooterView =
isHasFooter =
notifyDataSetChanged();
public int getItemViewType(int position) {
if(isHasHeader&&position==0){
TYPE_HEADER;
if(isHasFooter&&isHasHeader&&position==list.size()+1){
TYPE_FOOTER;
return TYPE_NORMAL;
public boolean onItemMove(int fromPosition, int toPosition) {
if(fromPosition&=list.size()){
//交换mItems数据的位置
Collections.swap(list,fromPosition-1,toPosition-1);
//交换RecyclerView列表中item的位置
notifyItemMoved(fromPosition,toPosition);
public void onItemDismiss(int position) {
if(position&=list.size()) {
//删除mItems数据
list.remove(position - 1);
//删除RecyclerView列表对应item
notifyItemRemoved(position);
class MyViewHodler extends RecyclerView.ViewHolder{
public MyViewHodler(View itemView) {
super(itemView);
textView= (TextView) itemView.findViewById(R.id.text_recyclerlistview);
imageView= (ImageView) itemView.findViewById(R.id.recyclerview_imag);
安卓开发技术新,市场占有率大!慕课网专业讲师全力打造Android入门到精通课程!系统化学习,精心服务,结合真实开发案例,提升学习效果,带你快速入行!直达名企!
listview和gridview的样式的列表已经完成了,有头部有底部,有上拉加载,有下拉刷新
现在看一下瀑布流样式的列表,当时在写这个的时候碰到一个问题,就是在滑动的过程中itme会移动甚至会出现自己换位置,很多人可能会写这个瀑布流的时候会使用瀑布流中自己适应itme的高度等等,我是写了两套布局,让item用两套不同的布局展现,你甚至可以再多写点,展示层次不同的瀑布流样式
package com.aykj.import android.content.Cimport android.support.v7.widget.RecyclerVimport android.support.v7.widget.StaggeredGridLayoutMimport android.view.LayoutIimport android.view.Vimport android.view.ViewGimport android.widget.ImageVimport android.widget.TextVimport java.util.Cimport java.util.L/** *这个是瀑布流形式的适配器 */public class StaggergridAdapter extends RecyclerView.Adapter&StaggergridAdapter.MyViewHodler& implements
onMoveAndSwipedListener{
private LayoutI
private List&String&
private View mHeaderV
private View
// 底部控件
private View mFooterV
private boolean isHasHeader =
private boolean isHasFooter =
public static final int TYPE_HEADER = 0;
public static final int TYPE_FOOTER = 1;
public static final int TYPE_LEFT = 2;
public static final int TYPE_RIGHT= 3;
public StaggergridAdapter(List&String& list, Context context) {
this.context =
this.list =
inflater = LayoutInflater.from(context);
public StaggergridAdapter.MyViewHodler onCreateViewHolder(ViewGroup parent, int viewType) {
//listview中的 getView方法 用于view的复用
viewTypeLayout = inflater.inflate(R.layout.activity_listview, parent, false);
StaggergridAdapter.MyViewHodler holder = new StaggergridAdapter.MyViewHodler(viewTypeLayout);
if (viewType == TYPE_FOOTER) {
// 如果是底部类型,返回底部视图
StaggeredGridLayoutManager.LayoutParams clp = (StaggeredGridLayoutManager.LayoutParams) mFooterView.getLayoutParams();
clp.setFullSpan(true);
return new StaggergridAdapter.MyViewHodler(mFooterView);
if (viewType == TYPE_HEADER) {
//头部视图
StaggeredGridLayoutManager.LayoutParams clp = (StaggeredGridLayoutManager.LayoutParams) mHeaderView.getLayoutParams();
clp.setFullSpan(true);
return new StaggergridAdapter.MyViewHodler(mHeaderView);
}if(viewType==TYPE_LEFT){
viewTypeLayout=inflater.inflate(R.layout.activity_layoutgrid,parent,false);
return new StaggergridAdapter.MyViewHodler(viewTypeLayout);
}if(viewType==TYPE_RIGHT){
viewTypeLayout=inflater.inflate(R.layout.activity_listview,parent,false);
return new StaggergridAdapter.MyViewHodler(viewTypeLayout);
public void onBindViewHolder(MyViewHodler holder, int position) {
//相当于listview适配器中的getitem()方法;
if (isHasHeader && isHasFooter) {
// 有头布局和底部时,向前便宜一个,且最后一个不能绑定数据
if (position == 0 || position == list.size() + 1) {
int pos = getRealPosition(holder);
String data =list.get(pos);
if (holder instanceof MyViewHodler) {
holder.textView.setText(data);
public int getRealPosition(RecyclerView.ViewHolder holder) {
if (isHasHeader = true) {
int position = holder.getLayoutPosition();
return mHeaderView == null ? position : position - 1;
if (isHasFooter = true) {
int position = holder.getLayoutPosition();
return mFooterView == null ? position : position + 1;
void addll(List&String& data){
this.list.addAll(data);
notifyDataSetChanged();
public int getItemCount() {
int size = list.size();
if (isHasFooter)
if (isHasHeader)
public void setHeaderView(View headerView) {
mHeaderView = headerV
isHasHeader =
notifyItemInserted(0);
* 添加底部视图
public void setFooterView(View footer) {
mFooterView =
isHasFooter =
notifyDataSetChanged();
public int getItemViewType(int position) {
if(isHasHeader&&position==0){
TYPE_HEADER;
if(isHasFooter&&isHasHeader&&position==list.size()+1){
TYPE_FOOTER;
}if(position%2==0){
//position取余,就是让itme使用不同的布局
TYPE_LEFT;
TYPE_RIGHT;
public boolean onItemMove(int fromPosition, int toPosition) {
if(fromPosition&=list.size()){
//交换mItems数据的位置
Collections.swap(list,fromPosition-1,toPosition-1);
//交换RecyclerView列表中item的位置
notifyItemMoved(fromPosition,toPosition);
public void onItemDismiss(int position) {
if(position&=list.size()) {
//删除mItems数据
list.remove(position - 1);
//删除RecyclerView列表对应item
notifyItemRemoved(position);
class MyViewHodler extends RecyclerView.ViewHolder{
TextView textV
ImageView imageV
public MyViewHodler(View itemView) {
super(itemView);
textView= (TextView) itemView.findViewById(R.id.text_recyclerlistview);
imageView= (ImageView) itemView.findViewById(R.id.recyclerview_imag);
三种样式的recyclerview已经全部实现了,是带有头部底部和上拉加载,下拉刷新的功能,不知道有没有人看到我里面实现了一个onMoveAndSwipedListener接口,这个是一个自定义接口里面有两个方法,是用来实现itme的拖拽和删除功能的,这个也是使用提供好的一个工具类ItemTouchHelper.Callback,直接继承就行package com.aykj.import android.support.v7.widget.LinearLayoutMimport android.support.v7.widget.RecyclerVimport android.support.v7.widget.helper.ItemTouchH/** * Created by Administrator on . */public class SimpleItemTouchHelperCallback extends ItemTouchHelper.Callback {
private onMoveAndSwipedListener
moveAndSwipedL
public SimpleItemTouchHelperCallback(onMoveAndSwipedListener
Listener){
moveAndSwipedListener=L
/**这个方法是用来设置我们拖动的方向以及侧滑的方向的*/
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
if (viewHolder.getItemViewType()==RecyclerviewAdapter.TYPE_HEADER||viewHolder.getItemViewType()==RecyclerviewAdapter.TYPE_FOOTER){//头部和底部视图不允许拖动
return viewHolder.getAdapterPosition();
//如果是ListView样式的RecyclerView
if (recyclerView.getLayoutManager() instanceof LinearLayoutManager){
//设置拖拽方向为上下
final int dragFlags = ItemTouchHelper.UP|ItemTouchHelper.DOWN;
//设置侧滑方向为从左到右和从右到左都可以
final int swipeFlags = ItemTouchHelper.START|ItemTouchHelper.END;
//将方向参数设置进去
return makeMovementFlags(dragFlags,swipeFlags);
}else{//如果是GridView样式的RecyclerView
//设置拖拽方向为上下左右
final int dragFlags = ItemTouchHelper.UP|ItemTouchHelper.DOWN|
ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT;
//不支持侧滑
final int swipeFlags = 0;
return makeMovementFlags(dragFlags,swipeFlags);
/**当我们拖动item时会回调此方法*/
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
//如果两个item不是一个类型的,我们让他不可以拖拽
if (viewHolder.getItemViewType() != target.getItemViewType()){
//头部和底部视图不允许拖动
moveAndSwipedListener.onItemMove(viewHolder.getAdapterPosition(),target.getAdapterPosition());
/**当我们侧滑item时会回调此方法*/
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
//回调adapter中的onItemDismiss方法
moveAndSwipedListener.onItemDismiss(viewHolder.getAdapterPosition());
基本上就算完成了,Reclerview+SwipeRefreshLayout+头部底部+itme侧滑删除+长按互换位置等这几个功能大家有兴趣的可以试试
总结,使用完之后的感觉就是确实是比listview等等实现的方法更灵活,更加好用,相比于listview的适配器,reclerview的适配更加的灵活,底部封装了ViewHodler让我们省去了很多步骤,比如getview的复用,我自己这几天的学习就这样,如果有哪里说的不对的,请大家指正,互相学习,最后,致敬大神
我没有添加itme点击方法的,如果大家想要去实现,那就都自己写,因为reclerview并没有提供,多多学习,android的路很长,我们需要虚心学习
顶层,致敬大神,希望以后我也可以成为一名高级软件开发工程师或者一名资深架构师,想想不犯法吧!哈哈
楼主可以的
登录百度帐号推荐应用

我要回帖

更多关于 js实现页面自动刷新 的文章

 

随机推荐