Android官方下拉刷新控件SwipeRefreshLayout使用详解
程序员文章站
2024-03-06 12:40:38
可能开发安卓的人大多数都用过很多下拉刷新的开源组件,但是今天用了官方v4支持包的swiperefreshlayout觉得效果也蛮不错的,特拿出来分享。
简介:
sw...
可能开发安卓的人大多数都用过很多下拉刷新的开源组件,但是今天用了官方v4支持包的swiperefreshlayout觉得效果也蛮不错的,特拿出来分享。
简介:
swiperefreshlayout组件只接受一个子组件:即需要刷新的那个组件。它使用一个侦听机制来通知拥有该组件的监听器有刷新事件发生,换句话说我们的activity必须实现通知的接口。该activity负责处理事件刷新和刷新相应的视图。一旦监听者接收到该事件,就决定了刷新过程中应处理的地方。如果要展示一个“刷新动画”,它必须调用setrefrshing(true),否则取消动画就调用setrefreshing(false)。
并且这个东西只支持下拉刷新,大家可以自定义view继承它实现你的上拉加载。
怎样使用swiperefreshlayout:
使用起来非常简单。
下面将用一个实例展示如何使用官方这个下拉刷新控件,末尾我还模仿虚拟实现了一个小的上拉加载效果,可以供大家向上分析。
先上图:
上点代码:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <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="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"> <listview 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="http://schemas.android.com/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"/> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="正在玩命加载中...." android:id="@+id/textview2"/> </linearlayout>
mainactivity.java
package com.example.nanchen.swiperefreshlayoutdemo; import android.os.bundle; import android.os.handler; import android.os.message; import android.support.v4.widget.swiperefreshlayout; import android.support.v7.app.appcompatactivity; import android.view.view; import android.widget.abslistview; import android.widget.arrayadapter; import android.widget.listview; import java.util.arraylist; import java.util.arrays; import java.util.list; public class mainactivity extends appcompatactivity implements abslistview.onscrolllistener { private swiperefreshlayout swiperefreshlayout; private listview lv; private arrayadapter adapter; private list<string> list; private view footerview; private handler handler = new handler(){ @override public void handlemessage(message msg) { super.handlemessage(msg); switch (msg.what){ case 0x101: if (swiperefreshlayout.isrefreshing()){ adapter.notifydatasetchanged(); swiperefreshlayout.setrefreshing(false);//设置不刷新 } break; } } }; @override 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() { @override public void onrefresh() { new loaddatathread().start(); } }); } private int visiblelastindex;//用来可显示的最后一条数据的索引 @override public void onscrollstatechanged(abslistview view, int scrollstate) { if(adapter.getcount() == visiblelastindex && scrollstate == scroll_state_idle){ new loaddatathread().start(); } } @override public void onscroll(abslistview view, int firstvisibleitem, int visibleitemcount, int totalitemcount) { visiblelastindex = firstvisibleitem + visibleitemcount - 1;//减去最后一个加载中那条 } /** * 模拟加载数据的线程 */ class loaddatathread extends thread{ @override public void run() { initdata(); try { thread.sleep(2000); } catch (interruptedexception e) { e.printstacktrace(); } handler.sendemptymessage(0x101);//通过handler发送一个更新数据的标记 } private void initdata() { list.addall(arrays.aslist("json","xml","udp","http")); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 详细解读Java的串口编程
推荐阅读
-
Android官方下拉刷新控件SwipeRefreshLayout使用详解
-
Android下拉刷新控件SwipeRefreshLayout源码解析
-
Android中Spinner(下拉框)控件的使用详解
-
Android下拉刷新以及GridView使用方法详解
-
Android官方下拉刷新控件SwipeRefreshLayout使用详解
-
Android下拉刷新控件SwipeRefreshLayout源码解析
-
Android中Spinner(下拉框)控件的使用详解
-
Android下拉刷新以及GridView使用方法详解
-
Android下拉刷新SwipeRefreshLayout控件使用方法
-
Android下拉刷新SwipeRefreshLayout控件使用方法