欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android:下拉刷新+加载更多+滑动删除实例讲解

程序员文章站 2024-03-06 19:46:02
         小伙伴们在逛淘宝或者是各种app上,都可以看到这样的功能,下拉刷新和加载更...

         小伙伴们在逛淘宝或者是各种app上,都可以看到这样的功能,下拉刷新和加载更多以及滑动删除,刷新,指刷洗之后使之变新,比喻突破旧的而创造出新的,比如在手机上浏览新闻的时候,使用下拉刷新的功能,我们可以第一时间掌握最新消息,加载更多是什么nie,简单来说就是在网页上逛淘宝的时候,我们可以点击下一页来满足我们更多的需求,但是在手机端就不一样了,没有上下页,怎么办nie,方法总比困难多,细心的小伙伴可能会发现,在手机端中,有加载更多来满足我们的要求,其实加载更多也是分页的一种体现。小伙伴在使用手机版qq的时候,消息界面会有很多的信息,如果你也像小编一样有强迫症,想把看完的消息进行删除,怎么办nie,qq实现了向右滑动删除的功能,最近在小编的项目中,就遇到这样的功能下拉刷新和加载更多以及滑动删除,经过几天的捣鼓,当冬日的第二缕阳光照到小编身上的时候,小编终于把她捣鼓出来了,今天这篇博客,小编主要和小伙伴们分享下拉刷新和加载更多一级滑动删除,希望可以帮助到有需要的小伙伴,还请小伙伴们多多指教。

       首先我们需要来编写xml里面的内容,我们命名为activity_item,具体代码如下所示:

xml/html代码

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:id="@+id/ll_parent" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:background="@android:color/darker_gray" 
  android:orientation="vertical" > 
 
  <textview 
    android:id="@+id/tv_text" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:textsize="25sp" /> 
 
</linearlayout>

       接着,我们来编写list_item里面有关xml的代码,具体代码如下所示:

xml/html代码

<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" 
  xmlns:tools="http://schemas.android.com/tools" 
  android:id="@+id/ll_parent" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:gravity="center" 
  android:background="@android:color/darker_gray" 
  tools:context=".mainactivity" > 
 
  <textview 
    android:id="@+id/list_item_textview" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centervertical="true" 
    android:textcolor="#000" 
    android:textsize="16sp" /> 
 
  <framelayout 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_centervertical="true" 
    android:layout_alignparentright="true" 
    android:padding="15dp" > 
 
    <textview 
      android:id="@+id/tv_functions" 
      android:layout_width="90dp" 
      android:layout_height="50dp" 
      android:layout_gravity="center" 
      android:background="@drawable/btn_del_bg" 
      android:gravity="center" 
      android:textcolor="@android:color/white" 
      android:text="删除" />  
 
    <textview 
      android:id="@+id/tv_coating" 
      android:layout_width="90dp" 
      android:layout_height="50dp" 
      android:background="@android:color/darker_gray" 
      android:layout_gravity="center" 
      android:visibility="gone" /> 
  </framelayout> 
 
</relativelayout> 

       第三步,我们来编写main里面的xml文件,具体代码如下所示:

xml/html代码

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent" 
  android:background="#f0f0f0" 
  android:orientation="vertical" > 
 
  <textview 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" /> 
 
  <me.maxwin.view.xlistview 
    android:id="@+id/xlistview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:cachecolorhint="#00000000" > 
  </me.maxwin.view.xlistview> 
 
</linearlayout> 

       第四步,我们来编写xlistview_footer里面的xml文件,具体代码如下所示:

xml/html代码

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content" > 
 
  <relativelayout 
    android:id="@+id/xlistview_footer_content" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="10dp" > 
 
    <progressbar 
      android:id="@+id/xlistview_footer_progressbar" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerinparent="true" 
      android:visibility="invisible" /> 
 
    <textview 
      android:id="@+id/xlistview_footer_hint_textview" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerinparent="true" 
      android:text="@string/xlistview_footer_hint_normal" /> 
  </relativelayout> 
 
</linearlayout>

       第五步,我们来编写xlistview_header里面的xml文件,具体代码如下所示:

xml/html代码

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content" 
  android:gravity="bottom" > 
 
  <relativelayout 
    android:id="@+id/xlistview_header_content" 
    android:layout_width="fill_parent" 
    android:layout_height="60dp" > 
 
    <linearlayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerinparent="true" 
      android:gravity="center" 
      android:orientation="vertical" android:id="@+id/xlistview_header_text"> 
 
      <textview 
        android:id="@+id/xlistview_header_hint_textview" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="@string/xlistview_header_hint_normal" /> 
 
      <linearlayout 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_margintop="3dp" > 
 
        <textview 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:text="@string/xlistview_header_last_time" 
          android:textsize="12sp" /> 
 
        <textview 
          android:id="@+id/xlistview_header_time" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:textsize="12sp" /> 
      </linearlayout> 
    </linearlayout> 
 
    <imageview 
      android:id="@+id/xlistview_header_arrow" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignleft="@id/xlistview_header_text" 
      android:layout_centervertical="true" 
      android:layout_marginleft="-35dp" 
      android:src="@drawable/xlistview_arrow" /> 
 
    <progressbar 
      android:id="@+id/xlistview_header_progressbar" 
      android:layout_width="30dp" 
      android:layout_height="30dp" 
      android:layout_alignleft="@id/xlistview_header_text" 
      android:layout_centervertical="true" 
      android:layout_marginleft="-40dp" 
      android:visibility="invisible" /> 
  </relativelayout> 
 
</linearlayout> 

       至此,关于我们的布局xml文件的代码都已经写完了,接着,我们开始编写java类里面的代码,首先,我们来编写itemactivity里面的代码,具体代码如下所示:

java代码

import android.app.activity; 
import android.os.bundle; 
import android.view.motionevent; 
import android.view.view; 
import android.view.view.ontouchlistener; 
import android.widget.textview; 
 
public class itemactivity extends activity implements ontouchlistener { 
 
  private float x, upx; 
 
  protected void oncreate(bundle savedinstancestate) { 
    super.oncreate(savedinstancestate); 
    setcontentview(r.layout.activity_item); 
    init(); 
  } 
 
  private void init() { 
    findviewbyid(r.id.ll_parent).setontouchlistener(this); 
    ((textview) findviewbyid(r.id.tv_text)).settext(getintent().getstringextra("item")); 
  } 
 
  public boolean ontouch(view v, motionevent event) { 
    if (event.getaction() == motionevent.action_down) { 
      x = event.getx(); 
    } 
    if (event.getaction() == motionevent.action_up) { 
      upx = event.getx(); 
      if (math.abs(x - upx) > 20) { 
        this.finish(); 
        overridependingtransition(0, r.anim.slide_out_to_right); 
      } 
    } 
    return true; 
  } 
 
} 

      接着,我们来编写适配器adapter里面的代码,具体代码如下所示:

java代码

import java.util.arraylist; 
 
import android.content.context; 
import android.view.layoutinflater; 
import android.view.view; 
import android.view.viewgroup; 
import android.widget.baseadapter; 
import android.widget.textview; 
 
public class itemadapter extends baseadapter { 
 
  private layoutinflater inflater; 
  private arraylist<string> datas; 
 
  public itemadapter(context context) { 
    inflater = layoutinflater.from(context); 
  } 
 
  public void setdata(arraylist<string> datas) { 
    this.datas = datas; 
  } 
 
  public int getcount() { 
    return datas.size(); 
  } 
 
  public object getitem(int position) { 
    return datas.get(position); 
  } 
 
  public long getitemid(int position) { 
    return position; 
  } 
 
  public view getview(final int position, view convertview, viewgroup parent) { 
    viewholder holder = null; 
    if (convertview == null) { 
      holder = new viewholder(); 
      convertview = inflater.inflate(r.layout.list_item, null); 
      holder.coating = (textview) convertview.findviewbyid(r.id.tv_coating); 
      holder.functions = (textview) convertview.findviewbyid(r.id.tv_functions); 
      holder.list_item_textview=(textview) convertview.findviewbyid(r.id.list_item_textview); 
      convertview.settag(holder); 
    } else { 
      holder = (viewholder) convertview.gettag(); 
    } 
     
    holder.list_item_textview.settext(datas.get(position)); 
 
    holder.coating.setvisibility(view.visible); 
     
    holder.functions.setclickable(false); 
     
    return convertview; 
  } 
 
  public final class viewholder { 
    public textview coating; 
    public textview functions; 
    public textview list_item_textview; 
  } 
} 

      最后我们来编写xlistviewactivity里面的代码,具体代码如下所示:

java代码

import java.util.arraylist; 
 
import me.maxwin.view.xlistview; 
import me.maxwin.view.xlistview.ixlistviewlistener; 
import me.maxwin.view.xlistview.removelistener; 
import android.app.activity; 
import android.content.context; 
import android.content.intent; 
import android.os.bundle; 
import android.os.handler; 
import android.view.view; 
import android.widget.adapterview; 
import android.widget.adapterview.onitemclicklistener; 
 
public class xlistviewactivity extends activity implements ixlistviewlistener ,removelistener,onitemclicklistener{ 
  private xlistview mlistview; 
// private arrayadapter<string> madapter; 
  private itemadapter adapter; 
// private context context; 
  private arraylist<string> items = new arraylist<string>(); 
  private handler mhandler; 
  private int start = 0; 
  private static int refreshcnt = 0; 
  /** called when the activity is first created. */ 
  @override 
  public void oncreate(bundle savedinstancestate) { 
    super.oncreate(savedinstancestate); 
    setcontentview(r.layout.main); 
    geneitems(); 
    init(); 
     
    mhandler = new handler(); 
  } 
   
  private void init() { 
    // todo auto-generated method stub 
    mlistview = (xlistview) findviewbyid(r.id.xlistview); 
    mlistview.setpullloadenable(true); 
    mlistview.setremovelistener(this); 
    mlistview.setonitemclicklistener(this); 
//   mlistview.setpullloadenable(false); 
//   mlistview.setpullrefreshenable(false); 
    mlistview.setxlistviewlistener(this); 
    adapter=new itemadapter(this); 
    adapter.setdata(items); 
    mlistview.setadapter(adapter); 
 
  } 
   
   
  private void geneitems() { 
    for (int i = 0; i != 20; ++i) { 
      items.add("refresh cnt " + (++start)); 
    } 
  } 
 
  private void onload() { 
    mlistview.stoprefresh(); 
    mlistview.stoploadmore(); 
    mlistview.setrefreshtime("刚刚"); 
  } 
   
  @override 
  public void onrefresh() { 
    mhandler.postdelayed(new runnable() { 
      @override 
      public void run() { 
        start = ++refreshcnt; 
        items.clear(); 
        geneitems(); 
        // madapter.notifydatasetchanged(); 
        adapter=new itemadapter(xlistviewactivity.this); 
        adapter.setdata(items); 
        mlistview.setadapter(adapter); 
        onload(); 
      } 
    }, 2000); 
  } 
 
  @override 
  public void onloadmore() { 
    mhandler.postdelayed(new runnable() { 
      @override 
      public void run() { 
        geneitems(); 
        adapter.notifydatasetchanged(); 
        onload(); 
      } 
    }, 2000); 
  } 
   
  @override 
  public void removeitem(int position) { 
    // todo auto-generated method stub 
    mlistview.isslide = false; 
    mlistview.itemview.findviewbyid(r.id.tv_coating).setvisibility(view.visible); 
    items.remove(position); 
    adapter.notifydatasetchanged(); 
     
  } 
 
 
  @override 
  public void onitemclick(adapterview<?> parent, view view, int position, 
      long id) { 
    // todo auto-generated method stub 
    intent intent = new intent(getapplicationcontext(), itemactivity.class); 
    intent.putextra("item", items.get(position)); 
    startactivity(intent); 
    overridependingtransition(r.anim.slide_in_from_right, r.anim.remain_original_location); 
     
  } 
 
} 

      至此,以上就是android 实现 下拉刷新和加载以及滑动删除的知识整理,谢谢大家对本站的支持!