我有一個RecyclerView,我添加了可以在列表項上執行的不同操作。特別是,DragDrop
和SwipeDismiss
。 DragDrop
由長按啓動,SwipeDismiss
由刷卡啓動。我必須留意滾動事件以阻止這些行爲的發生。滾動令人討厭,然後突然轉爲拖動。在我添加一個OnScrollListener
來處理這個問題之前。CoordinatorLayout與RecyclerView:onScroll
這是我之前做過:
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if(newState == RecyclerView.SCROLL_STATE_IDLE){
drag.setCurrentAction(IDLE);
} else {
drag.setCurrentAction(SCROLL);
}
}
不再將工作
我最近添加CoordinatorLayout for collapsable toolbars。現在滾動時,drag
將不會被設置爲SCROLL
,直到工具欄被摺疊。我試圖創建自己的行爲,但那會取代我目前使用的行爲; @string/appbar_scrolling_view_behavior
。這刪除了我想要的工具欄的行爲,並沒有工作來通知我的drag
狀態。
我曾嘗試:
@Override
public boolean onStartNestedScroll(CoordinatorLayout cl, CollapsingToolbarLayout child, View directTargetChild,
View target, int nestedScrollAxes) {
if (nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL) {
if (drag.getCurrentAction().ordinal() < SCROLL.ordinal()) {
/* No actions have started and we are scrolling. set the new action */
drag.setCurrentAction(SCROLL);
}
return true;
}
return super.onStartNestedScroll(cl, child, directTargetChild, target, nestedScrollAxes);
}
@Override
public void onStopNestedScroll(CoordinatorLayout coordinatorLayout, CollapsingToolbarLayout child, View target) {
super.onStopNestedScroll(coordinatorLayout, child, target);
if (drag.getCurrentAction() == SCROLL) {
drag.setCurrentAction(INVALID);
}
}
所以我的問題
如何監聽正在由CoordinatorLayout
攔截我的回收站鑑於這些滾動的變化?行爲是否正確?
這是一個很好的博客,但它不提供解決我的問題。協調員佈局是根視圖,正在攔截我的觸摸。那就是滑動和拖拽,而且我的工作很好。我需要解決滾動沒有傳遞給recyclerView。 –
嗯,不,你沒有一切正常:否則你根本就沒有問題。你會有很多很容易的時間用'ItemTouchHandler'清除你的滑動/拖動代碼,它很好地適用於'CoordinatorLayout'和嵌套滾動。 – ianhanniballake
是的,這裏有一個問題,因爲我沒有問題,我的刷卡和拖動。就像我的問題所說的那樣,在我添加摺疊工具欄之前,這一切都正常。協調員佈局在滾動到達回收站視圖之前攔截滾動。我不認爲可以對回收站視圖進行任何更改,因爲根視圖首先得到所有接觸。它必須在協調員佈局中。 –