Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] Recuperar corretamente indice de listview após rotacionar dispositivo

Existe uma explicação. A altura da lista muda de uma orientação p/ outra - daí o primeiro e o último item visível entre as orientações sempre vão ser diferentes. Tente fazer uns cálculos "mais avançados", do tipo:

posição atual = última posição visível - primeira posição visível

É um chute, não sei se funciona.





2014-06-27 16:37 GMT-03:00 Matheus Silva <informatheus02@gmail.com>:
Digo com 90% de ctz que nao vai funcionar pq eu testei agora a pouco isso no fragment...
// saveinstance

outState
.putInt(LISTSTATE, listview.getFirstVisiblePosition());


// onCreateView
if (savedInstanceState != null) {

           
final int position = savedInstanceState.getInt(LISTSTATE, -1);

           
if (position != -1) {

               
                listview
.post(new Runnable() {

                   
@Override
                   
public void run() {

                        listview
.setSelection(position);

                   
}
               
});

           
}

       
}
... e sabe o que acontece?
De portrait pra landscape ele funciona direitinho, mas de landscape pra portrait ele vai pra ultima posição. Qual seria a maldita explicação pra isso?
Puta merda viu, eh por isso que eu desanimo tanto de programar pra android.


Em sexta-feira, 27 de junho de 2014 15h55min57s UTC-3, Eduardo Gielamo Oliveira escreveu:
Cara, desista do onSaveInstanceState do ListView e faça no braço:

no onSaveInstanceState da activity:

outState.putInt("listIndex", listView.getFirstVisiblePosition)

no onCreate / onRestoreInstanceState

listView.setTranscriptMode(...);
listView.setSelection(state.getInt("listIndex", 0));

Não é muito elegante, mas deve funcionar. :)


2014-06-27 15:37 GMT-03:00 Matheus Silva <informa...@gmail.com>:

Ja tentei salvar o primeiro, o ultimo, o estado total, mas depois de tudo isso comecei a perceber que a minha maldição eh o transcript mode. Quando eu seto ele, a lista vai direto pro final.
Tentei agora a pouco fazer o seguinte:
if (savedInstanceState != null
               
&& savedInstanceState.getParcelable(LISTSTATE) != null) {

            listview
.onRestoreInstanceState(savedInstanceState
                   
.getParcelable(LISTSTATE));
       
} else {

            listview
.setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);

       
}

Mas me parece que esse tal de listview.onSaveInstanceState() não salva o transcript mode, o que fez com que da primeira rotação em diante a lista nao fosse mais transcript mode.
Ateh agora a visão que eu tenho eh que esse onSaveInstanceState() nao serve pra nada.

Em sexta-feira, 27 de junho de 2014 10h35min04s UTC-3, Eduardo Gielamo Oliveira escreveu:
Olá Matheus,

já tentou salvar o estado da primeira e da última posição visível?

Att,

Eduardo

Em 26/06/2014 17:12, "Matheus Silva" <informa...@gmail.com> escreveu:
Percebi que ao desativar o transcript mode, a lista é recuperada exatamente na mesma posição em que estava antes da rotação, até com diferença dos pixels. O que eu acho um mistério a menos que o adapter em si guarde essa posição.
Mas nada disso muda o fato de que eu preciso de transcript pq eh um chat. O que fazer?

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário