欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android实战教程第四十三篇之上拉加载与下拉刷新

程序员文章站 2024-02-29 20:07:22
listview的下拉刷新很常见,很多开源的框架都能做到这个效果,当然也可以自己去实现。本篇案例是基于xlistview的。 布局:

listview的下拉刷新很常见,很多开源的框架都能做到这个效果,当然也可以自己去实现。本篇案例是基于xlistview的。

布局:

<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" > 
 
 <me.maxwin.view.xlistview 
  android:id="@+id/xlv" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" /> 
 
</relativelayout> 

主活动的代码:

package com.itydl.xlistviewdemo; 
 
import java.text.simpledateformat; 
import java.util.arraylist; 
import java.util.date; 
import java.util.list; 
 
import me.maxwin.view.xlistview; 
import me.maxwin.view.xlistview.ixlistviewlistener; 
import android.app.activity; 
import android.graphics.color; 
import android.os.bundle; 
import android.os.handler; 
import android.os.message; 
import android.os.systemclock; 
import android.view.view; 
import android.view.viewgroup; 
import android.widget.baseadapter; 
import android.widget.textview; 
 
public class mainactivity extends activity { 
 
 private xlistview mxlistview; 
 list<string> datas = new arraylist<string>(); 
 private myadapter adapter; 
 private boolean isloadmore;//是否正在加载更多数据的标记 
  
 private long pretime;//上一次刷新的当前系统时间毫秒值 
 private handler handler = new handler(){ 
  public void handlemessage(android.os.message msg) { 
   if(isloadmore){ 
    //消息是上拉加载更多 
    initdatas(); 
    isloadmore = false; 
    //刷新完毕,关闭上拉加载效果 
    mxlistview.stoploadmore(); 
   }else{ 
    //消息是下拉刷新 
    datas.clear(); 
    initdatas(); 
    //刷新完毕,关闭下拉刷新效果 
    mxlistview.stoprefresh(); 
   } 
   // 刷新listview 
   adapter.notifydatasetchanged(); 
  }; 
 }; 
 
 @override 
 protected void oncreate(bundle savedinstancestate) { 
  super.oncreate(savedinstancestate); 
  setcontentview(r.layout.activity_main); 
  initdatas(); 
  mxlistview = (xlistview) findviewbyid(r.id.xlv); 
  //设置适配器到listview 
  adapter = new myadapter(); 
  mxlistview.setadapter(adapter); 
  initlistener(); 
 } 
  
 private void initlistener() { 
  //设置可以下拉刷新,默认就是true 
  mxlistview.setpullrefreshenable(true); 
   
  //设置可以上拉加载,默认是false 
  mxlistview.setpullloadenable(true); 
   
  mxlistview.setxlistviewlistener(new ixlistviewlistener() { 
    
   @override 
   public void onrefresh() { 
    // 下拉刷新,实际发送handler 
    //发送一个空消息,延迟两秒后告知刷新数据 
    handler.sendmessagedelayed(message.obtain(), 2000); 
    //添加上一次刷新的时间: 
    if(pretime != 0){ 
     mxlistview.setrefreshtime(refreshdata(pretime)); 
    } 
    pretime = system.currenttimemillis(); 
   } 
 
   private string refreshdata(long pretime) { 
    return new simpledateformat("yyyy-mm-dd hh:mm:ss").format(new date(pretime)); 
   } 
 
   @override 
   public void onloadmore() { 
    //标记正在加载更多,发送handler 
    isloadmore = true; 
    handler.sendmessagedelayed(message.obtain(), 2000); 
   } 
  }); 
 } 
 
 /**模拟网络数据*/ 
 private void initdatas() { 
  //实际开发应该子线程执行 
  for (int i = 0; i < 50; i++) { 
   datas.add("我是第" + i + "条数据"); 
  } 
 } 
 
 private class myadapter extends baseadapter{ 
 
  @override 
  public int getcount() { 
   if(datas != null){ 
    return datas.size(); 
   } 
   return 0; 
  } 
 
  @override 
  public object getitem(int position) { 
   if(datas != null){ 
    return datas.get(position); 
   } 
   return null; 
  } 
 
  @override 
  public long getitemid(int position) { 
   return position; 
  } 
 
  @override 
  public view getview(int position, view convertview, viewgroup parent) { 
   //模拟item为textview 
   textview textview = new textview(mainactivity.this); 
   textview.settext(getitem(position)+""); 
   textview.settextcolor(color.green); 
   return textview; 
  } 
 } 
} 

短短几行代码已经完成了主要功能,运行如下:

Android实战教程第四十三篇之上拉加载与下拉刷新

喜欢的朋友可以关注我哦,本专栏会不定期更新简单有趣的android小文