相信用过PullToRefreshListView的同志们都会遇到很多奇奇怪怪的问题,项目打包异常、部分手机快速滑动留白问题。
今天就发现并基本解决了问题,所以分享一下。
首先是打包异常,会显示你的项目异常,但是在你clear之后又好了,在手机上运行飞快!!!报的错大概是PullToRefreshListView语言类异常,在此需要在项目中添加一段xml代码:
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<issue id="ExtraTranslation" severity="ignore" />
<issue id="MissingRegistered" severity="ignore" />
<issue id="MissingTranslation" severity="ignore" />
</lint>
这里需要将改代码添加到自己的项目中 lint.xml 。后会发现,问题解决了。
第二个是没有发现Item长按监听器,这在很多项目中经常使用的竟然不存在!!!
当然在查看很多帖子后大部分会让你在源码中添加长按监听器,来实现该功能,对于这其实并不需要。
在PullToRefreshListView中需要得到ListVIew来实现长按监听:
listView.getRefreshableView().setOnItemLongClickListener(onItemLongClickListener);
使用上述代码就可以实现长按监听功能了。
最后一个也是很麻烦的一个,一开始我用三星手机调试时并没有发现该问题,最后项目要结束的时候拿华为手机一测(这里并没有说华为手机不好,适配问题)。发现在快速滑动的时候,我滑动的越快,留白处越大,最大是占PullToRefreshListView控件的一半。发现这个问题,上网也找了解决方案,发现并不是都会实用。因为Android手机的多样性导致适配效果的不同。最后没办法想了个不是很好的解决方案:
首先是在布局上需要添加两行代码,来让用户在快速滑动时使其在顶端或低端暂时停留:
xmlns:app="http://schemas.android.com/apk/res-auto"
android:overScrollMode="never"
app:ptrShowIndicator="false"
这里可以解决部分手机的留白问题。
而还有部分手机如我的测试机华为,就对此很无奈了,需要对滑动状态进行监听来强制控制上下拉模式,使其停留:
OnScrollListener onScrollListener = new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case PullToRefreshListView.SCROLL_STATE_FLING:
case PullToRefreshListView.SCROLL_STATE_TOUCH_SCROLL:// 滑动或快速滑动使其禁止上下拉
listView.setMode(Mode.DISABLED);
break;
case PullToRefreshListView.SCROLL_STATE_IDLE:
if (mailCount == index) {
listView.setMode(Mode.PULL_FROM_START);// 滑到加载网络数据结束
} else {
listView.setMode(Mode.BOTH); // 否则使其上下拉效果打开
}
break;
}
listView.onRefreshComplete();
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
};
在对PulltoRefreshListView添加该监听器后,发现问题得以缓解,是缓解,因为留白问题并不是很多,在快速滑动时也会有小小部分的留白,不过这没什么,在滑到低端时在此滑动就会进行加载效果。在该监听器中还需要进行多次逻辑处理,按业务需要来编写,这只是我自己的大概思路。
目前只能这样了,如果有更好的方法不吝赐教,谢谢!!!