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

所属分类: 软件编程 / Android 阅读数: 36
收藏 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 byte[] 和short[]转换的方法代码

这篇文章主要介绍了android byte[] 和short[]转换的方法代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android获取应用程序大小的方法

这篇文章主要介绍了Android获取应用程序大小的方法,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android获取其他包的Context实例代码

这篇文章主要介绍了Android获取其他包的Context实例代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android放大镜的实现代码

这篇文章主要介绍了Android放大镜的实现代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android 读取Properties配置文件的小例子

这篇文章主要介绍了Android 读取Properties配置文件的小例子,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android通讯录开发之删除功能的实现方法

这篇文章主要介绍了Android通讯录开发之删除功能的实现方法,有需要的朋友可以参考一下
收藏 0 赞 0 分享

使用ViewPager实现android软件使用向导功能实现步骤

现在的大部分android软件,都是使用说明,就是第一次使用该软件时,会出现向导,可以左右滑动,然后就进入应用的主界面了,下面我们就实现这个功能
收藏 0 赞 0 分享

android在异步任务中关闭Cursor的代码方法

android在异步任务中如何关闭Cursor?在我们开发应用的时候,很多时候会遇到这种问题,下面我们就看看代码如何实现
收藏 0 赞 0 分享

Android自定义桌面功能代码实现

android自定义桌面其实很简单,看一个例子就明白了
收藏 0 赞 0 分享

android将图片转换存到数据库再从数据库读取转换成图片实现代码

有时候我们想把图片存入到数据库中,尽管这不是一种明智的选择,但有时候还是不得以会用到,下面说说将图片转换成byte[]数组存入到数据库中去,并从数据库中取出来转换成图像显示出来
收藏 0 赞 0 分享
查看更多