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

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小文

(0)

相关推荐

  • Android自定义listview布局实现上拉加载下拉刷新功能

    listview实现上拉加载以及下拉刷新的方式有很多.下面是我写的一种自定义的布局,复用性也比较的强.首先就是继承的listview的自定义view.   AutoListView.Java: package com.example.mic.testdemo.view; import android.annotation.TargetApi; import android.content.Context; import android.os.Build; import android.os.Bu

  • Android RecyclerView 上拉加载更多及下拉刷新功能的实现方法

    RecyclerView 已经出来很久了,但是在项目中之前都使用的是ListView,最近新的项目上了都大量的使用了RecycleView.尤其是瀑布流的下拉刷新,网上吧啦吧啦没有合适的自己总结了一哈. 先贴图上来看看: 使用RecyclerView实现上拉加载更多和下拉刷新的功能我自己有两种方式: 1.使用系统自带的Android.support.v4.widget.SwipeRefreshLayout这个控价来实现. 2.自定义的里面带有RecyleView的控件. 使用RecycleVie

  • Android RecyclerView下拉刷新和上拉加载更多

    今天终于有点时间,来写了一下: 为RecyclerView实现下拉刷新和上拉加载更多.今天会在前面的两篇文章的基础上: RecyclerView系列之(1):为RecyclerView添加Header和Footer RecyclerView系列之(2):为RecyclerView添加分隔线 继续讲述RecyclerView中一些常用组件的实现下拉刷新和上拉加载更多的功能. 在现在的Android手机应用中,几乎每一个APP都有下拉刷新和上拉加载更多的功能,它们的重要性不言而喻. 先不多说,先看效

  • Android中 视频屏幕左半部分上下滑动改变亮度右半部分上下滑动改变声音

    说明: 实现功能: (1)屏幕右半部分上滑,声音变大,下滑,声音变小 屏幕左半部分上滑,亮度变大,下滑,亮度变小 (2)如果亮度>1或者小于0.2时,手机震动 private float startY;//记录手指按下时的Y坐标 private float startX;//记录手指按下时的Y坐标 private int downVol;//记录手指按下时的音量 private Vibrator vibrator;//手机震动器 //不要忘记震动权限<uses-permission andro

  • Android RecyclerView实现下拉刷新和上拉加载

    RecyclerView已经出来很久了,许许多多的项目都开始从ListView转战RecyclerView,那么,上拉加载和下拉刷新是一件很有必要的事情. 在ListView上,我们可以通过自己添加addHeadView和addFootView去添加头布局和底部局实现自定义的上拉和下拉,或者使用一些第三方库来简单的集成,例如Android-pulltorefresh或者android-Ultra-Pull-to-Refresh,后者的自定义更强,但需要自己实现上拉加载. 而在下面我们将用两种方式

  • Android实现上拉加载更多以及下拉刷新功能(ListView)

    首先为大家介绍Andorid5.0原生下拉刷新简单实现. 先上效果图: 相对于上一个19.1.0版本中的横条效果好看了很多.使用起来也很简单. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" and

  • android搜索框上下滑动变色效果

    搜索框上下滑动变透明度是现在APP中很常见的效果,先看看效果: 首先来看下布局骨架: <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

  • Android下拉刷新上拉加载控件(适用于所有View)

    前面写过一篇关于下拉刷新控件的文章下拉刷新控件终结者:PullToRefreshLayout,后来看到好多人还有上拉加载更多的需求,于是就在前面下拉刷新控件的基础上进行了改进,加了上拉加载的功能.不仅如此,我已经把它改成了对所有View都通用!可以随心所欲使用这两个功能~~ 我做了一个大集合的demo,实现了ListView.GridView.ExpandableListView.ScrollView.WebView.ImageView.TextView的下拉刷新和上拉加载.后面会提供demo的

  • Android制作简单垂直上拉下滑View效果

    一.简介 最近朋友公司需要实现一个垂直上拉下滑的View,该View最初只有一部分显示在屏幕最下方,上拉那一部分可以将该View全部拉出来并全部显示在屏幕上,下滑该View可以将该View隐藏在屏幕下. 先看一下最终实现效果吧. 二.实现思路 1.这个效果其实有很多实现方法,为了让松手时有一个viewpager一样的缓慢滑动的效果我选择用scrollBy配合Scroller,应该是既方便又实用的. 2.这个View的设计是这样的: (1)将这个View的子view通过layout放在该View下

  • android开发教程之实现listview下拉刷新和上拉刷新效果

    复制代码 代码如下: public class PullToLoadListView extends ListView implements OnScrollListener { private static final String TAG = PullToLoadListView.class.getSimpleName(); private static final int STATE_NON = 0; private static final int STATE_PULL_TO_REFRE

随机推荐