- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
每次我向上或向下滚动列表时,我都会使用 OnScrollListener
隐藏(或取消隐藏)一些 View 。这是附加到我的 ListView
的代码。
lv.setOnScrollListener(new OnScrollListener() {
private int mLastFirstVisibleItem;
private boolean mIsScrollingUp = true;
private LinearLayout ll = (LinearLayout) getActivity()
.findViewById(R.id.llSearchPlaces);
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (view.getId() == lv.getId()) {
final int currentFirstVisibleItem = lv
.getFirstVisiblePosition();
if (currentFirstVisibleItem > mLastFirstVisibleItem) {
if (mIsScrollingUp == true) {
mIsScrollingUp = false;
Log.i("a", "scrolling down...");
floatingActionButton.hide();
Animation animation = new TranslateAnimation(0, 0,
0, 200);
animation.setDuration(300);
animation
.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(
Animation animation) {
ll.setVisibility(View.INVISIBLE);
}
@Override
public void onAnimationRepeat(
Animation animation) {
}
@Override
public void onAnimationStart(
Animation animation) {
}
});
ll.startAnimation(animation);
}
} else if (currentFirstVisibleItem < mLastFirstVisibleItem) {
if (mIsScrollingUp == false) {
mIsScrollingUp = true;
floatingActionButton.show();
Log.i("a", "scrolling up...");
Animation animation = new TranslateAnimation(0, 0,
200, 0);
animation.setDuration(400);
animation
.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(
Animation animation) {
}
@Override
public void onAnimationRepeat(
Animation animation) {
}
@Override
public void onAnimationStart(
Animation animation) {
ll.setVisibility(View.VISIBLE);
}
});
ll.startAnimation(animation);
}
}
mLastFirstVisibleItem = currentFirstVisibleItem;
}
}
});
布局:
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipe_refresh_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ListView
android:id="@id/android:list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fadeScrollbars="true"
android:listSelector="#00000000"
android:scrollbars="none" />
</android.support.v4.widget.SwipeRefreshLayout>
自从我添加了 SwipeRefreshLayout
之后,当我在上面的监听器中 Log
时,我什么也得不到。如何同时使用这两个项目?
编辑:好像this是我需要的,但我不能让它继续工作
作为那篇文章的一部分,我在 onScroll
中添加了它,但它似乎不起作用。
if (firstVisibleItem == 0) {
swipeLayout.setEnabled(true);
} else {
swipeLayout.setEnabled(false);
}
EDIT2:这是问题的核心:似乎 onScroll
方法在 Activity 首次启动和加载列表时触发,然后再也不会触发。
最佳答案
我对 RecyclerView
和 ListView
也有同样的问题。向下滚动无论项目数量如何,都无法返回到列表顶部。
这将禁用 SwipeRefreshLayout
,直到第一个可见项目或任何项目位置可见。您还可以沿着这个绑定(bind)不同的滚动监听器。确保在重新填充列表时启用(如果之前禁用)SwipeRefreshLayout
。
public class SwipeRefreshLayoutToggleScrollListenerListView implements AbsListView.OnScrollListener {
private List<AbsListView.OnScrollListener> mScrollListeners = new ArrayList<AbsListView.OnScrollListener>();
private int mExpectedVisiblePosition = 0;
public SwipeRefreshLayoutToggleScrollListenerListView(SwipeRefreshLayout mSwipeLayout) {
this.mSwipeLayout = mSwipeLayout;
}
private SwipeRefreshLayout mSwipeLayout;
public void addScrollListener(AbsListView.OnScrollListener listener){
mScrollListeners.add(listener);
}
public boolean removeScrollListener(AbsListView.OnScrollListener listener){
return mScrollListeners.remove(listener);
}
public void setExpectedFirstVisiblePosition(int position){
mExpectedVisiblePosition = position;
}
private void notifyOnScrolled(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount){
for(AbsListView.OnScrollListener listener : mScrollListeners){
listener.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount);
}
}
private void notifyScrollStateChanged(AbsListView view, int scrollState){
for(AbsListView.OnScrollListener listener : mScrollListeners){
listener.onScrollStateChanged(view, scrollState);
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
notifyScrollStateChanged(view, scrollState);
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
notifyOnScrolled(view, firstVisibleItem, visibleItemCount, totalItemCount);
if(firstVisibleItem != RecyclerView.NO_POSITION)
mSwipeLayout.setEnabled(firstVisibleItem == mExpectedVisiblePosition);
}
}
编辑:
lv.setOnScrollListener(new SwipeRefreshLayoutToggleScrollListenerListView(mSwiperLayout){
//override methods here, don't forget the super calls.
});
关于android - SwipeRefreshLayout 干扰 setOnScrollListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27464351/
我的 setOnScrollListener 有问题。每当我滚动到 ListView 的底部时,它就会一直调用我的异步任务。如何将 setOnScrollListener 设置为仅在到达底部后加载。
每次我向上或向下滚动列表时,我都会使用 OnScrollListener 隐藏(或取消隐藏)一些 View 。这是附加到我的 ListView 的代码。 lv.setOnScrollListener(
我尝试实现教程中描述的粘性标题 ListView http://javatechig.com/android/listview-header-parallax-with-sticky-view-in-
当新数据在循环中连续加载而无需用户滚动时,我在 gridview 中实现 setOnScrollListener 时遇到问题。我想等待用户滚动到末尾然后才加载新数据。如何做到这一点?这是给我无限循环而
我正在工作 BaseAdapter.i 有自定义 ArrayList.i 成功地在我的 ListView 中调整了我的自定义 ListView 这是我的基本适配器源 public class Tran
我想在用户向下滚动 >90% 时做一些事情,所以我想我可以像在 ListView 中那样添加一个 onScrollListener。不幸的是,ScrollView 似乎没有类似的方法。有什么办法可以做
当用户到达列表中可见的项目时,如何在底部显示进度条。 我编写了一段代码,我在其中使用 Web 服务获取数据,现在我想填充部分记录,因为我的 JSON 中有大约 630 条记录。 这是我用来从 JSON
setOnScrollListener 已弃用。阅读文档 from here它告诉使用 addOnScrollListener(OnScrollListener) 和 removeOnScrollLi
下面是一个代码,其中数据将在滚动时出现,但有一个错误,即类转换异常。请帮我解决这个错误。现在我已经添加了整个 fragment 类Similar_Matchs_Tab,我们可以在其中从服务器获取。 j
这是我第一次使用 onscroll 监听器。我的问题是每次向下滚动时如何获取 20 个新行?。 我知道当我向下滚动 GridView 时将执行此代码。 public void onScroll(Abs
我是一名优秀的程序员,十分优秀!