当前位置: 移动技术网 > IT编程>移动开发>Android > Android XListView下拉刷新和上拉加载更多

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

风险投资如何投资,讴姆五组大咖爱亚,krmv-440

市面上有好多的类比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(); 

运行看看效果:

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

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网