Android基础之Listview的滚动事件的学习
来源:互联网 发布:js怎么设置cssimporant 编辑:程序博客网 时间:2024/06/05 23:04
## Listview的滚动事件##
ListView的另一个重要事件是列表滚动事件。列表滚动事件可以通过为ListView控件设置OnScrollListener监听器来进行处理。该监听器定义了两种事件处理方法。一个是onScrollStateChanged方法,做为滚动状态变更时的回调方法。另一个是onScoll方法,当列表滚动或快速滑动时回调。
·为ListView添加滚动事件 - setOnScrollListener(OnScrollListener listener)·OnScrollListener - void onScrollStateChanged(AbsListView view,int scrollState) //作为滑动状态变更时的回调方法 参数:view--事件源 scrollState--滑动状态用常量表示 SCROLL_STATE_IDLE:空闲状态 SCROLL_STATE_TOUCH_SCROLL:滑动状态或手指未离开屏幕 SCROLL_STATE_FLING:快速滑动状态 - void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount,int totalItemCount) //当列表滚动或快速滑动时回调 参数:view--事件源 firstVisivleItem--滑动状态中能被看到的item visibleItemCount--可以被看到的item数量和 totalItemCount--总数据长度
示例:
在上一篇案例上添加:
首先在适配器中添加:
public void addMusic(ArrayList<Music> music) { if(music !=null){ this.music = music; notifyDataSetChanged(); } }
其次在activity中添加addlistener方法并修改adapter初始化数据:
adapter = new MusicAdapter(this, MusicBiz.getMusic(poge++));
private void addListener(){ lvMusic.setOnScrollListener(new OnScrollListener() { private int visibleItem; @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if(scrollState == OnScrollListener.SCROLL_STATE_IDLE && visibleItem == adapter.getCount()-1){ ArrayList<Music> musics = MusicBiz.getMusic(poge++); adapter.addMusic(musics); adapter.notifyDataSetChanged(); } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { visibleItem = firstVisibleItem + visibleItemCount -1; } }); }
快速滚动时使用懒加载模式优化音乐列表
所谓懒加载模式是指在ListView快速滑动时,不加载和更新列表项中的耗时数据。当快速滑动停止时才开始更新。从而避免用户快速滑动过程中造成ListView的加载负担过重
案例:
修改MusicAdapter中的代码:
package com.cainiao.adapter;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.ImageView;import android.widget.TextView;public class MusicAdapter extends BaseAdapter { private ArrayList<Music> music; private LayoutInflater inflater; private boolean idle; public void setIdle(boolean idle) { this.idle = idle; } public MusicAdapter(Context context,ArrayList<Music> music) { if(music != null){ this.music = music; }else{ music = new ArrayList<Music>(); } this.inflater = LayoutInflater.from(context); this.setIdle(true); } public void addMusic(ArrayList<Music> music) { if(music !=null){ this.music = music; notifyDataSetChanged(); } } @Override public int getCount() { return music.size(); } @Override public Object getItem(int position) { return music.get(position); } @Override public long getItemId(int position) { return music.get(position).getId(); } @Override public View getView(int position, View convertView, ViewGroup parent) { //加载item到view ViewHolder holder; if(convertView == null){ convertView = inflater.inflate(R.layout.item, null); holder = new ViewHolder(); holder.tvName = (TextView) convertView.findViewById(R.id.tv_Name); holder.tvAlbum = (TextView) convertView.findViewById(R.id.tv_Album); holder.tvArtist = (TextView) convertView.findViewById(R.id.tv_Artist); holder.tvduration = (TextView) convertView.findViewById(R.id.tv_Duration); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } if(idle){ //根据位置从集合中获取一条数据 Music m = music.get(position); //将数据加写在item view上 holder.tvName.setText(m.getName()); holder.tvAlbum.setText(m.getAlbum()); holder.tvArtist.setText(m.getArtist()); holder.tvduration.setText(m.getDuration()); } //返回绑定了数据的item view return convertView; /*//加载item到view View v = inflater.inflate(R.layout.item, null); TextView tvName = (TextView) v.findViewById(R.id.tv_Name); TextView tvAlbum = (TextView) v.findViewById(R.id.tv_Album); TextView tvArtist = (TextView) v.findViewById(R.id.tv_Artist); TextView tvDurstion = (TextView) v.findViewById(R.id.tv_Duration); //根据位置从集合中获取一条数据 Music m = music.get(position); //将数据加写在item view上 tvName.setText(m.getName()); tvAlbum.setText(m.getAlbum()); tvArtist.setText(m.getArtist()); tvDurstion.setText(m.getDuration()); //返回绑定了数据的item view*/ } class ViewHolder{ private TextView tvName,tvAlbum,tvArtist,tvduration; }}
在activity中添加addListenerll方法:
private void addListenerll(){ lvMusic.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case OnScrollListener.SCROLL_STATE_IDLE: adapter.setIdle(true); adapter.notifyDataSetChanged(); break; case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: case OnScrollListener.SCROLL_STATE_FLING: adapter.setIdle(false); break; default: break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub } }); }
0 0
- Android基础之Listview的滚动事件的学习
- 监听ListView的滚动事件
- android listview 的滚动
- 【Android】安卓学习笔记之ListView 的点击事件
- Android 中listview 和scrollview 滚动冲突事件的解决方法
- Android——监听ListView的滚动事件。。。
- Android之listview的点击事件
- ListView的滚动事件onScrollListener详解
- Android - 滚动ListView的适配器
- android之listView滚动过程的几个方法记录
- Android基础之ListView的使用详解
- Android基础之ListView的使用详解
- ListView的基础学习
- Android ScrollView的滚动事件
- android学习之ListView布局的学习
- android开发之横向滚动/竖向滚动的ListView(固定列头)
- ------------------Android中对GridView, ListView等滚动控件的Touch事件onInterceptTouchEvent,onTouchEvent了解
- Android中对GridView, ListView等滚动控件的Touch事件onInterceptTouchEvent,onTouchEvent了解
- java_69_annotation
- 编程基础——第二单元 循环
- 用Jquery的attr方法动态添加JSON对象参数
- SpringMVC接收json数据的demo
- this class is not key value coding-compliant for the key countryImageView-bug
- Android基础之Listview的滚动事件的学习
- 贪心&Packets
- android系列学习:tab切换,fragment中嵌套listview,listview自定义item,优化以及onclick
- 缓存页面数据(对象+图片)
- android View的相关知识点
- Ubuntu14.04安装搜狗拼音输入法开机死机
- Anaconda中安装python3.4环境
- 编程基础——第三单元 数组
- [Baby steps giant steps] BSGS EXT-BSGS