Passar evento de movimento para o Scrollview pai quando o Listview na parte superior / inferior
eu tenho umListView
em umScrollView
para mostrar comentários e eu gostaria de fazer o seguinte:
Quando o usuário desliza para baixo, primeiro oScrollView
deve rolar completamente para baixo, pois a lista está na parte inferior. Quando estiver totalmente desativado, oListiew
deve começar a rolar.
Da mesma forma, quando o usuário está rolando para cima, primeiro oListView
(ordem revertida aqui!) deve rolar para cima, antes doScrollView
começa a rolar.
Até agora, fiz o seguinte:
listView.setOnTouchListener(new View.OnTouchListener() {
// Setting on Touch Listener for handling the touch inside ScrollView
@Override
public boolean onTouch(View v, MotionEvent event) {
// If going up but the list is already at up, return false indicating we did not consume it.
if(event.getAction() == MotionEvent.ACTION_UP) {
if (listView.getChildCount() == 0 && listView.getChildAt(0).getTop() == 0) {
Log.e("Listview", "At top!");
return false;
}
}
// Similar behaviour but when going down check if we are at the bottom.
if( event.getAction() == MotionEvent.ACTION_DOWN) {
if (listView.getLastVisiblePosition() == listView.getAdapter().getCount() - 1 &&
listView.getChildAt(listView.getChildCount() - 1).getBottom() <= listView.getHeight()) {
Log.e("Listview","At bottom!");
v.getParent().requestDisallowInterceptTouchEvent(false);
return false;
}
}
v.getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});
Os logs são acionados no momento certo, porém oScrollView
não se moverá mesmo que eu retorne falso.
Eu também tentei adicionarv.getParent().requestDisallowInterceptTouchEvent(false);
às declarações, mas isso também não funcionou.
Como posso fazer isso funcionar?