Android XListView下拉刷新和上拉加载更多

市面上有好多的类比ListView刷新数据的开源框架,如:v4包自带的SwipeRefreshLayout ,以及集ListView、GridView甚至WebView于一身的Pulltorefresh等等。前述的两个开源框架目前使用也算频繁。有兴趣的读者可以自行搜索,当然有时间一定回来对所有的使用方式做一个汇总和比较。今天介绍的这款框架,专门针对ListView做下拉刷新与上拉加载的,如果单单是ListView就显得更加简单方便易于理解。
1、首先引入xListView_lib库到自己的Demo上
2、使用步骤
它的使用步骤跟普通的ListView是一样,这也是选择它的原因。使用非常简单方便。
布局如下so easy:

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

按照ListView的方式使用XlistView:

package com.itydl.xlistviewdemo; 

import java.util.ArrayList;
import java.util.List; 

import me.maxwin.view.XListView;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.Menu;
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; 

  @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);
  } 

  /**模拟网络数据*/
  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;
    } 

  }
}

运行结果:

上边只是做了展示,并没有任何加载和刷新的效果。接下来就以完整代码形式,实现加载更多与刷新。

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;
    }
  }
}

在上边代码中,添加了刷新和加载,并且在下拉刷新的同时,加入了刷新时候系统时间值。
注意的地方:设置可否下拉刷新默认为true,加载更多默认为false。需要加入下面两行代码:

//设置可以下拉刷新,默认就是true
mXListView.setPullRefreshEnable(true); 

//设置可以上拉加载,默认是false
mXListView.setPullLoadEnable(true);

在刷新完毕,一定记得关闭,即需要下面两行代码:

//刷新完毕,关闭上拉加载效果
mXListView.stopLoadMore();

//刷新完毕,关闭下拉刷新效果
mXListView.stopRefresh();

运行看看效果:

如果想要改变它的样式,也是很简单的。因为它的头布局和为布局是独立开的,知直接去布局文件修改一下显示样式就可以了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(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开发ListView中下拉刷新上拉加载及带列的横向滚动实现方法

    ListView 控件可使用四种不同视图显示项目.通过此控件,可将项目组成带有或不带有列标头的列,并显示伴随的图标和文本. 可使用 ListView 控件将称作 ListItem 对象的列表条目组织成下列四种不同的视图之一:1.大(标准)图标2.小图标3.列表4.报表 View 属性决定在列表中控件使用何种视图显示项目. 还可用 LabelWrap 属性控制列表中与项目关联的标签是否可换行显示.另外,还可管理列表中项目的排序方法和选定项目的外观. 相信有很人做的项目估计都用的到这个.就是List

  • Android ListView实现上拉加载下拉刷新和滑动删除功能

    最近项目需要用到可以滑动删除并且带有上拉加载下拉刷新的Listview,查阅了一些资料,大多都是在SwipeMenuListView的基础上去添加头部和底部View,来扩展上拉加载和下拉刷新的功能,不过需要手动的去绘制UI及处理一些动画效果.用起来也不是特别方便.刚好项目中用到PulltorefreshLibrary库,就尝试着扩展了一个PullToRefreshSwipeMenuListView类来实现需求.先看一下效果: 实现步骤 一.组合Pulltorefresh与SwipeMenuLis

  • ListView实现下拉刷新加载更多的实例代码(直接拿来用)

    ListView Api bixu 好好看看 mNewsAdapter.notifyDataSetChanged();//刷新ListView 自定义的RefreashListView package com.itguang.dell_pc.myapplication.view; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import and

  • Android仿XListView支持下拉刷新和上划加载更多的自定义RecyclerView

    首先给大家展示下效果图,感觉还不错,请继续往下阅读: 下拉刷新:        上划加载        在项目更新的过程中,遇到了一个将XListView换成recyclerView的需求,而且更换完之后大体效果不能变,但是对于下拉刷新这样的效果,谷歌给出的解决方案是把RecyclerView放在一个SwipeRefreshLayout中,但是这样其实是拉下一个小圆形控件实现的,和XListView的header效果不同.在网上找了很多的别人代码,都没有实现我想要的效果,于是自己动手写了一个.

  • Android ListView实现下拉加载功能

    本文实例为大家分享了ListView下拉加载展示的具体代码,供大家参考,具体内容如下 1.MyListView.Java public class MyListView extends ListView implements OnScrollListener { private final static int RELEASE_To_REFRESH = 0;// 下拉过程的状态值 private final static int PULL_To_REFRESH = 1; // 从下拉返回到不刷新

  • 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程序开发之Listview下拉刷新上拉(滑动分页)加载更多

    最近做的类似于微博的项目中,有个Android功能要使用到listview的向下拉刷新来刷新最新消息,向上拉刷新(滑动分页)来加载更多. 新浪微博就是使用这种方式的典型. 当用户从网络上读取微博的时候,如果一下子全部加载用户未读的微博这将耗费比较长的时间,造成不好的用户体验,同时一屏的内容也不足以显示如此多的内容.这时候,我们就需要用到另一个功能,那就是listview的分页了,其实这个分页可以做成客户端的分页,也可以做成服务器端的分页(点击加载时,从服务器对应的加载第N页就好了!!!).通过分

  • Android ListView下拉刷新上拉自动加载更多DEMO示例

    代码下载地址已经更新.因为代码很久没更新,已经很落伍了,建议大家使用RecyclerView实现. 参考项目: https://github.com/bingoogolapple/BGARefreshLayout-Android https://github.com/baoyongzhang/android-PullRefreshLayout 下拉刷新,Android中非常普遍的功能.为了方便便重写的ListView来实现下拉刷新,同时添加了上拉自动加载更多的功能.设计最初是参考开源中国的And

  • Android ListView实现上拉加载更多和下拉刷新功能

    本文实例为大家介绍了Android ListView下拉刷新功能的实现方法和功能,供大家参考,具体内容如下 1.ListView优化方式 界面缓存:ViewHolder+convertView 分页加载:上拉刷新 图片缓存 快速滑动ListView禁止刷新 2.效果 3.上拉加载更多原理及实现 当我们手指滑动到listview最后位置的时候,我们触发加载数据的方法.这触发之前我们需要做一些工作,包括: 如何判断滑动到最后? 如何避免重复加载数据? 加载之后如何刷新界面? 1).界面实现AbsLi

随机推荐