ListView中的滚动事件及自动翻页功能

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

   在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;
    		
			@Override
			public void onScrollStateChanged(AbsListView view, int scrollState) {
				// TODO Auto-generated method stub
				if(scrollState == OnScrollListener.SCROLL_STATE_IDLE
						&& lastVisibleItem == adapter.getCount() - 1){
					//加载新数据
					ArrayList<Music> musics = MusicBiz.getMusics(page++);
					adapter.addData(musics);
				}
			}
			
			@Override
			public void onScroll(AbsListView view, int firstVisibleItem,
					int visibleItemCount, int totalItemCount) {
				// TODO Auto-generated method stub
//				计算当前可见的最后一个Item
			   lastVisibleItem = firstVisibleItem + visibleItemCount - 1;	
			}
		});
    }
	@Override
	protected 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;
		else
			this.musics = new ArrayList<Music>();
		this.inflater = LayoutInflater.from(context);
	}
	
	public void addData(ArrayList<Music> musics){
		if(musics != null){
			this.musics.addAll(musics);
			notifyDataSetChanged();
		}
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return musics.size();
	}

	@Override
	public Music getItem(int position) {
		// TODO Auto-generated method stub
		return musics.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return getItem(position).getId();
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		
		ViewHolder 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>


posted @   wojiaohuangyu  阅读(124)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示