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

ListView-添加item的事件监听实例

程序员文章站 2022-05-28 10:22:32
1. 点击事件(onitemclicklistener) onitemclick(adapterview parent, view vi...

1. 点击事件(onitemclicklistener)

onitemclick(adapterview<?> parent, view view, int position, long id)

parent:官方解释为:the adapterview where the click happened,也就是用户所点击的adapterview,这个参数一般不用。

view:当前点击的列表项所对应的布局view对象,可通过这个参数获得相应的列表项内部的组件,进而对其进行操作。举个例子,假设有一个listview,含有4个列表项,你点了第2个,那么通过view你就可以操作第2个列表项里面的textview、imageview等等的组件(假设存在)。

position:当前点击的列表项的位置,从0开始,也就是点击第n个,position就是n-1。

id:当前点击的列表项的序号,也是从0开始,所以大部分时候position和id是一样的,至于这两个参数之间有什么不同,有兴趣的童鞋可以深究一下。

public class mainactivity extends activity implements adapterview.onitemclicklistener{

  private listview mylistview;
  private simpleadapter simpleadapter;
  private list<map<string, object>> data;

  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_main);

    data = new arraylist<map<string, object>>();
    simpleadapter = new simpleadapter(this, getdata(), r.layout.item, new string[]{"img", "text"}, new int[]{r.id.img, r.id.text});
    mylistview = (listview) findviewbyid(r.id.mylistview);
    //设置监听器
    mylistview.setadapter(simpleadapter);
    mylistview.setonitemclicklistener(this);
  }

  private list<map<string, object>> getdata() {
    for (int i = 0; i < 20; i++) {
      map<string, object>map = new hashmap<string, object>();
      map.put("img", r.mipmap.ic_launcher);
      map.put("text", "初始simpleadapter"+(i+1));
      data.add(map);
    }

    return data;
  }

  @override
  public void onitemclick(adapterview<?> parent, view view, int position, long id) {
    //通过view获取其内部的组件,进而进行操作
    string text = (string) ((textview)view.findviewbyid(r.id.text)).gettext();
    //大多数情况下,position和id相同,并且都从0开始
    string showtext = "点击第" + position + "项,文本内容为:" + text + ",id为:" + id;
    toast.maketext(this, showtext, toast.length_long).show();
  }
}

2. 滚动事件(onscrolllistener)

void onscrollstatechanged(abslistview view, int scrollstate)

监听滚动状态的变化。

view:正在被滚动的视图,也就是当前的listview。

scrollstate:滚动状态,分别有以下几种:

scroll_state_touch_scroll:滑动状态,手指在视图滑动,并且手指一直停留在屏幕上而未离开。

scroll_state_fling:投掷状态,手指在离开视图前,用力划了一下(想象将视图投掷出去的感觉),视图会按照惯性滑动至停止。

scroll_state_idle:闲置状态,什么都没做的状态。当投掷状态或触摸滚动状态结束时,进入闲置状态。

void onscroll(abslistview view, int firstvisibleitem, int visibleitemcount, int totalitemcount)

监听非滚动状态,只要listview不滚动,就会被不断调用。

view:正在被滚动的视图,也就是当前的listview。

firstvisibleitem:已加载的第一个列表项的索引值。

visibleitemcount:已加载的列表项的总数。

totalitemcount:适配器中数据源对应的列表项总数。

public class mainactivity extends activity implements abslistview.onscrolllistener{

  private listview mylistview;
  private simpleadapter simpleadapter;
  private list<map<string, object>> data;

  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_main);

    data = new arraylist<map<string, object>>();
    simpleadapter = new simpleadapter(this, getdata(), r.layout.item, new string[]{"img", "text"}, new int[]{r.id.img, r.id.text});
    mylistview = (listview) findviewbyid(r.id.mylistview);
    mylistview.setadapter(simpleadapter);

    //设置监听器
    mylistview.setonscrolllistener(this);
  }

  private list<map<string, object>> getdata() {
    for (int i = 0; i < 20; i++) {
      map<string, object>map = new hashmap<string, object>();
      map.put("img", r.mipmap.ic_launcher);
      map.put("text", "初始simpleadapter"+(i+1));
      data.add(map);
    }

    return data;
  }

  @override
  public void onscrollstatechanged(abslistview view, int scrollstate) {
    switch (scrollstate) {
      //投掷状态
      case scroll_state_fling:
        toast.maketext(this, "scroll_state_fling", toast.length_short).show();
        break;
      //闲置状态
      case scroll_state_idle:
        toast.maketext(this, "scroll_state_idle", toast.length_short).show();
        break;
      //滑动状态
      case scroll_state_touch_scroll:
        toast.maketext(this, "scroll_state_touch_scroll", toast.length_short).show();
        break;
    }
  }

  @override
  public void onscroll(abslistview view, int firstvisibleitem, int visibleitemcount, int totalitemcount) {
//    toast.maketext(this, "滚动已停止,已加载的第一项的索引为:" + firstvisibleitem +
//            ",已加载的列表项总数为:" + visibleitemcount + ",存在的列表项总数为:" +
//            totalitemcount, toast.length_long).show();
  }
}

以上这篇listview-添加item的事件监听实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。