ListView中的滚动事件及自动翻页功能
来源:互联网 发布:linux服务器监听端口 编辑:程序博客网 时间:2024/05/16 12:44
ListView的滚动事件
为ListView添加滚动事件
setOnScrollListener(OnScrollListener listener)
OnScrollListener
void onScrollStateChanged(AbsListView view,int scrollState)
SCROLL_STATE_IDLE
SCROLL_STATE_TOUCH_SCROLL
SCROLL_STATE_FLING
void Scroll(AbsListView view,int firstVisibleItem,int visibleItemCounyt,
int totalItemCount)
ListView滑动到底部自动翻页
要点
为自定义适配器,添加追加数据集的方法
为ListView添加滚动事件监听器
在onScroll方法中计算lastVisibleItem
适配器几乎也没有变化:
为ListView添加滚动事件
setOnScrollListener(OnScrollListener listener)
OnScrollListener
void onScrollStateChanged(AbsListView view,int scrollState)
SCROLL_STATE_IDLE
SCROLL_STATE_TOUCH_SCROLL
SCROLL_STATE_FLING
void Scroll(AbsListView view,int firstVisibleItem,int visibleItemCounyt,
int totalItemCount)
ListView滑动到底部自动翻页
要点
为自定义适配器,添加追加数据集的方法
为ListView添加滚动事件监听器
在onScroll方法中计算lastVisibleItem
在onScrollStateChanged方法中,判断是否滑动到底部,如果滑动到底部加载新数据,并刷新listview
下面是一个能够实现自动翻页功能的小项目
主Activity:
package com.example.listview1;import java.util.ArrayList;import android.app.Activity;import android.app.AlertDialog;import android.os.Bundle;import android.view.View;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;public class MainActivity extends Activity { private ListView lvMusics; private MusicAdapter adapter; private int page; private AlertDialog dialog; private void setupView(){ lvMusics = (ListView) findViewById(R.id.lvMusics); page = 1; adapter = new MusicAdapter(this, MusicBiz.getMusics(page++)); lvMusics.setAdapter(adapter); } private void addListener(){ lvMusics.setOnScrollListener(new OnScrollListener() { private int lastVisibleItem; @Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {// TODO Auto-generated method stubif(scrollState == OnScrollListener.SCROLL_STATE_IDLE&& lastVisibleItem == adapter.getCount() - 1){//加载新数据ArrayList<Music> musics = MusicBiz.getMusics(page++);adapter.addData(musics);}}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {// TODO Auto-generated method stub//计算当前可见的最后一个Item lastVisibleItem = firstVisibleItem + visibleItemCount - 1;}}); }@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);setupView();addListener();}}
实现的对象:
为了省事,代码几乎跟前几次一样。。。。。。
package com.example.listview1;public class Music { private String name; private String album; private int id; private String duration; private String artist; private String musicPath; private String albumPicPath;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAlbum() {return album;}public void setAlbum(String album) {this.album = album;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getDuration() {return duration;}public void setDuration(String duration) {this.duration = duration;}public String getArtist() {return artist;}public void setArtist(String artist) {this.artist = artist;}public String getMusicPath() {return musicPath;}public void setMusicPath(String musicPath) {this.musicPath = musicPath;}public String getAlbumPicPath() {return albumPicPath;}public void setAlbumPicPath(String albumPicPath) {this.albumPicPath = albumPicPath;} public String toString(){return "Music [id=" + id +",name=" + name + ",album=" + album +",duration=" + duration + ",artist=" + artist +",musicPath=" + musicPath + ",albumPicPath=" + albumPicPath + "]";}}
适配器几乎也没有变化:
package com.example.listview1;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 MusicAdapter extends BaseAdapter { private ArrayList<Music> musics; private LayoutInflater inflater; public MusicAdapter(Context context,ArrayList<Music> musics) {if(musics != null) this.musics = musics;elsethis.musics = new ArrayList<Music>();this.inflater = LayoutInflater.from(context);}public void addData(ArrayList<Music> musics){if(musics != null){this.musics.addAll(musics);notifyDataSetChanged();}}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn musics.size();}@Overridepublic Music getItem(int position) {// TODO Auto-generated method stubreturn musics.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn getItem(position).getId();}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubViewHolder holder = null;if(convertView == null){convertView = inflater.inflate(R.layout.item, null);holder = new ViewHolder();holder.tvName = (TextView)convertView.findViewById(R.id.tvName);holder.tvAlbum = (TextView)convertView.findViewById(R.id.tvAlbum);holder.tvArtist = (TextView)convertView.findViewById(R.id.tvArtist);holder.tvDuration = (TextView)convertView.findViewById(R.id.tvDuration);convertView.setTag(holder);}else{holder = (ViewHolder)convertView.getTag();}Music m = musics.get(position);holder.tvName.setText(m.getName());holder.tvAlbum.setText(m.getAlbum());holder.tvArtist.setText(m.getArtist());holder.tvDuration.setText(m.getDuration());return convertView;}class ViewHolder{private TextView tvName;private TextView tvDuration;private TextView tvArtist;private TextView tvAlbum;}}
操作者同样的一组数据:
package com.example.listview1;import java.util.ArrayList;public class MusicBiz { public static ArrayList<Music> getMusics(int page){ ArrayList<Music> musics = new ArrayList<Music>(); int i=(page - 1) * 20 +1; int end = i+20; for(;i<end;i++){ Music m = new Music(); m.setId(i); m.setName("歌曲" + i); m.setAlbum("专辑" + i); m.setAlbumPicPath("D:/www.123/123/1.jpg"); m.setDuration("14:23"); m.setArtist("陈奕迅"); m.setMusicPath("http://www.123wer/123/music.jpg"); musics.add(m); } return musics; }}
布局相同:
<ListView android:id="@+id/lvMusics" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:android="http://schemas.android.com/apk/res/android" />
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <ImageView android:layout_width="64dp" android:layout_height="64dp" android:src="@drawable/image"/> <TableLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1.0" android:stretchColumns="*"> <TableRow android:layout_height="0dp" android:layout_weight="1.0"> <TextView android:id="@+id/tvName" android:layout_height="match_parent" android:gravity="center_vertical" android:textSize="20sp"/> <TextView android:id="@+id/tvDuration" android:layout_height="match_parent" android:gravity="center_vertical" android:textSize="20sp"/> </TableRow> <TableRow android:layout_height="0dp" android:layout_weight="1.0"> <TextView android:id="@+id/tvArtist" android:layout_height="match_parent" android:gravity="center_vertical" android:textSize="20sp"/> <TextView android:id="@+id/tvAlbum" android:layout_height="match_parent" android:gravity="center_vertical" android:textSize="20sp"/> </TableRow> </TableLayout></LinearLayout>
0 0
- ListView中的滚动事件及自动翻页功能
- 实现ListView自动翻页(自动上下滚动)
- ListView滚动翻页
- listview 滚动翻页
- ListView 滚动翻页/滚动加载
- ListView滚动翻页/滚动加载
- Android不继承ViewPager实现自动滚动翻页功能
- ListView滚动翻页 异步加载
- ListView滚动翻页 异步加载
- Android ListView 滚动翻页效果
- Android ListView 滚动翻页效果
- 横向ListView (二)—— 添加快速滚动功能及item相关事件实现
- Android ListView简单使用及滚动事件
- Android中的ListView用法(自动滚动)
- wpf listbox 滚动翻页功能
- 自动滚动ListView
- ListView自动滚动方法
- ListView自动滚动方法
- #pragma pack(1) 的用法 强制单字节对齐
- GenyMotion 一直停在开机画面
- [Cloud Networking Notes] Management and sharing of network infrastructure in cloud data centers
- PAT-甲级1002
- Boost源码学习三[实用工具](2)
- ListView中的滚动事件及自动翻页功能
- 1055. The World's Richest (25)
- iOS 用NSAttributedString处理文字大小不一致情况
- redis conf配置文件详解
- 【Hours】使用indexedDB中遇到的问题。
- 初步体验libsvm用法3(matlab实例)
- 关于垂直切分Vertical Sharding的粒度
- iOS 控制器View的生命周期及相关函数
- 43,指针函数具有良好的扩展性