android音乐播放器音乐加载,Android开源音乐播放器之在线音乐列表自动加载更多...

系列文章

前言

当咱们的ListView数据比较多时,咱们通常都会选择分页显示,而分页显示就须要一个动做触发加载更多操做,一般咱们会使用上拉加载更多,但我以为不够人性化,由于用户须要手动上拉,因此更加人性化的方案应该是列表滚动到底部自动加载更多。咱们以在线音乐列表为例,因为不须要刷新,所以这里咱们不讨论刷新功能。java

思路分析

触发自动加载后,须要在ListView底部显示一个进度条,表示正在加载。咱们最容易想到的办法就是给ListView添加FooterView,这也是最直接的办法。但ListView的addFooterView方法有一个限制,必须在setAdapter以前调用,而咱们显示正在加载进度条前,确定要先给ListView设置适配器,这样就比较尴尬了。这时咱们就要用到ListView的另外一个特性了,那就是虽然不能在setAdapter以后调用addFooterView,但能够在setAdapter以前调用addFooterView,紧接着调用removeFooterView,将进度条隐藏掉,而后就能够随时调用addFooterView,而无论setAdapter是否已经被调用。git

代码实现

public class AutoLoadListView extends ListView implements AbsListView.OnScrollListener {

private static final String TAG = AutoLoadListView.class.getSimpleName();

private View vFooter;

private OnLoadListener mListener;

private int mFirstVisibleItem = 0;

private boolean mEnableLoad = true;

private boolean mIsLoading = false;

public AutoLoadListView(Context context) {

super(context);

init();

}

// 其余构造函数...

private void init() {

vFooter = LayoutInflater.from(getContext()).inflate(R.layout.auto_load_list_view_footer, null);

addFooterView(vFooter, null, false);

setOnScrollListener(this);

onLoadComplete();

}

public void setOnLoadListener(OnLoadListener listener) {

mListener = listener;

}

public void onLoadComplete() {

Log.d(TAG, "onLoadComplete");

mIsLoading = false;

removeFooterView(vFooter);

}

public void setEnable(boolean enable) {

mEnableLoad = enable;

}

@Override

public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

boolean isPullDown = firstVisibleItem > mFirstVisibleItem;

if (mEnableLoad && !mIsLoading && isPullDown) {

int lastVisibleItem = firstVisibleItem + visibleItemCount;

if (lastVisibleItem >= totalItemCount - 1) {

onLoad();

}

}

mFirstVisibleItem = firstVisibleItem;

}

@Override

public void onScrollStateChanged(AbsListView view, int scrollState) {

}

private void onLoad() {

Log.d(TAG, "onLoad");

mIsLoading = true;

addFooterView(vFooter, null, false);

if (mListener != null) {

mListener.onLoad();

}

}

}

复制代码

代码不长,就把它所有贴出来了,逻辑处理主要在onScroll函数里,首先根据上一个firstVisibleItem和当前的firstVisibleItem能够判断列表是否在向上滚动,而后比较firstVisibleItem + visibleItemCount和totalItemCount的大小能够判断列表是否滚动到了底部(即最后一个item已经可见),若是是向上滚动,滚动到了最后一条,且没有触发正在加载时,就能够触发自动加载更多了。 咱们来看下效果图 github

8d5be38a2a8a92d83cf6571b9c611ba5.png 你们能够运行

源码或下载

波尼音乐查看详细效果。

迁移自个人简书 2016.06.09bash

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值