Role AndroidStaggeredGrid para uma posição específica
-
21-12-2019 - |
Pergunta
estou a usar https://github.com/etsy/AndroidStaggeredGrid/ no meu projeto.Tudo funciona bem, exceto que não consigo rolar para uma posição/item específico à vontade.
O que tentei até agora (tudo que consegui pensar, incluído em um trecho de código para você ver):
final StaggeredGridView gv = (StaggeredGridView) ma.findViewById(R.id.photosList);
gv.setChoiceMode(StaggeredGridView.CHOICE_MODE_SINGLE);
gv.setFocusable(true);
gv.clearFocus();
gv.post( new Runnable() {
@Override
public void run() {
// #1 approach
gv.requestFocusFromTouch();
gv.smoothScrollToPosition(index);
// #2 approach
gv.setSelection(index);
View v = gv.getChildAt(index);
if (v != null) {
// #3 approach
v.requestFocus();
}
//v.requestFocusFromTouch();
Utils.log("scroll to " + index);
gv.requestLayout();
}
});
Nada parece funcionar e estou começando a pensar que essa visualização tem algum tipo de bug relacionado ao meu problema.Existe alguém que possa me ajudar no assunto?
Solução
Descobri que não consegui rolar para um local específico; no entanto, descobri que consegui restaurar o estado do gridview.Em meu aplicativo, tive que implementar um mecanismo de backstack personalizado e você pode passar o estado do qual pode obter:
Parcelable state = mgridView.onSaveInstanceState();
O estado é Parcelable, então consegui colocarParcelable em uma intenção e, em seguida, recuperá-lo e restaurar o estado conforme necessário, assim
if(state != null) {
mgridView.onRestoreInstanceState(state);
}
Ao restaurar o estado, ele restaura exatamente a posição anterior na grade.
Espero que isso ajude alguém que esteja enfrentando esse problema!