課題
SwipeRefreshLayoutとRecyclerView, GridView, ListViewを同時に使用した際、リストの先頭まで戻らないうちにスワイプリフレッシュが実行されてしまう。
対策
参考のURLを元に制御する。
RecyclerView#setOnScrollListenerは既にDeprecatedとなっているため、
addOnScrollListenerを代わりに使用する。
final LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); recyclerView.addOnScrollListener(new OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { //super.onScrollStateChanged(recyclerView, newState); int firstPos=linearLayoutManager.findFirstCompletelyVisibleItemPosition(); if (firstPos>0) { swipeLayout.setEnabled(false); } else { swipeLayout.setEnabled(true); } } });
ListView,GridViewの場合
@Override public void onScrollStateChanged(AbsListView view, int scrollState) { int firstPos = view.getFirstVisiblePosition(); if (firstPos > 0) { mSwipeLayout.setEnabled(false); } else { mSwipeLayout.setEnabled(true); } }