最近使用android比较火的开源项目PullToRefresh控件,遇到一些问题,
一、怎么区分上拉和下拉
我在网上找了很多资料:
方法1:在PullToRefreshAdapterViewBase类中添加
public boolean isHeaderShown() {
return getHeaderLayout().isShown();
}
public boolean isFooterShown() {
return getFooterLayout().isShown();
}
两个方法,下拉的时候头部一定会显示,上拉的时候底部一定会显示,在程序里面判断哪个显示了进而实现刷新和加载!
这个方法是可以区分上拉下拉的,但是如果你要想修改头部和底部的文字,如”下拉刷新“和”上拉加载“,你会发现,文字要回弹的时候才改变,例如:上拉过程中应该显示”上拉加载“,但你会发现此时显示的你上一次的动作
所以这个方法不推荐
详细:/blog.csdn.net/ueryueryuery/article/details/17440465
方法2:使用OnRefreshListener2接口:
重写onPullDownToRefresh和onPullUpToRefresh方法,可以区分上拉下拉,但是有和方法一一样的问题,所以不推荐
方法3:使用滑动监听,在onScrollStateChanged
判断当前显示条目和首个显示条目的关系,如果当前显示大于首个显示条目则为上拉,反正则以
int
mLastFirstVisibleItem =
0
;
boolean
mIsScrollingUp;
@Override
public
void
onScrollStateChanged(AbsListView view,
int
scrollState)
{
if
(view.getId() == mListView.getId())
{
final
int
currentFirstVisibleItem = mListView.getFirstVisiblePosition();
if
(currentFirstVisibleItem > mLastFirstVisibleItem)
{
mIsUp =
true
;
}
else
if
(currentFirstVisibleItem < mLastFirstVisibleItem)
{
mIsUp =
false
;
}
mLastFirstVisibleItem = currentFirstVisibleItem;
}
}
参考资料:http://stackoverflow.com/questions/12114963/detecting-the-scrolling-direction-in-the-adapter-up-down/12115157#12115157
这个方法也是早就有人写出来了,我只是搬运工而已,在使用这个方法的时候的遇到一些问题:
1、mLion
stView没有getFirstVisiblePosition(),解决方法ListView mlistview = mListView
.getRefreshableView();
2、ScrollStateChanged
方法不执行,解决此方法
,ListView
的高度要比所有item高度之和下才会执行此方法
详细:http://glblong.blog.51cto.com/3058613/1312349/
二、PullToRefreshListView没有长按事件
解决方法 :ListView mlistview = mListView
.getRefreshableView();
mlistview.setOnItemLongClickListener