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

所属分类: 软件编程 / Android 阅读数: 30
收藏 0 赞 0 分享

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设计登录界面、找回密码、注册功能

这篇文章主要为大家详细介绍了Android设计登录界面的方法,Android实现找回密码、注册功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android通过手势实现答题器翻页效果

这篇文章主要为大家详细介绍了Android通过手势实现答题器翻页效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android采用双缓冲技术实现画板

这篇文章主要为大家详细介绍了Android采用双缓冲技术实现画板的相关资料,思路清晰,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android开发之毛玻璃效果实例代码

这篇文章主要给大家分享android开发之毛玻璃效果的实例代码,非常具有参考借鉴价值,感兴趣的朋友一起学习吧
收藏 0 赞 0 分享

Android实现桌面悬浮窗、蒙板效果实例代码

这篇文章主要介绍了Android实现桌面悬浮窗、蒙板效果实例代码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

深入解读Android的Volley库的功能结构

这篇文章主要介绍了Android的Volley开发框架的功能结构,Volley是Android开发中网络部分的一大利器,包含很多HTTP协议通信的相关操作,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发中使用Volley库发送HTTP请求的实例教程

这篇文章主要介绍了Android开发中使用Volley库发送HTTP请求的实例教程,包括创建Volley单例的基本知识与取消Request请求的技巧等,需要的朋友可以参考下
收藏 0 赞 0 分享

Android仿QQ聊天撒花特效 很真实

本文写的这个特效,是关于聊天的,你肯定遇到过,就是你跟人家聊天的时候,比如发送应(么么哒),然后屏幕上全部就是表情了,今天我们就是做这个,撒花的特效,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android的HTTP操作库Volley的基本使用教程

这篇文章主要介绍了Android的HTTP操作库Volley的基本使用教程,包括JSON请求与图片加载等用法的实例,需要的朋友可以参考下
收藏 0 赞 0 分享

Android仿水波纹流量球进度条控制器

这篇文章主要介绍了Android仿水波纹流量球进度条控制器的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多