sexta-feira, 18 de abril de 2014

Android: como descobrir que o usuário só virou o celular, não recarregou a tela realmente

Meu app se comunica com o meu site para trazer dados. Coloquei isso, feliz e contente, no onCreate das Activities. E, triste, descobri que, ao virar o celular, ele ia de novo lá chamar o site, ao invés de só virar o que existe ali.

Isso acontece porque, na verdade, quando você vira o celular, ele destrói a Activity e cria novamente. Estava procurando um jeito de detectar se minha Activity foi recarregada porque eu virei o celular ou se realmente é para renovar o conteúdo dela.

Achei este post aqui, no StackOverflow: http://stackoverflow.com/questions/7295804/is-that-possible-to-check-was-oncreate-called-because-of-orientation-change

Ao tentar usar a resposta que foi apontada como solução, ganhei deprecateds e métodos inexistentes. Mais abaixo, encontrei uma solução que funcionava.

Para facilitar, construi uma outra classe, que minhas activities herdarão para eu ter este controle:

public class FixOrientationActivity extends Activity
{
    private static int oldConfigInt;
    protected boolean rotated;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
       
        rotated =
            (oldConfigInt & ActivityInfo.CONFIG_ORIENTATION)
            ==
            ActivityInfo.CONFIG_ORIENTATION;
    }
   
    @Override
    protected void onDestroy()
    {
        super.onDestroy();
        oldConfigInt = getChangingConfigurations();
    }
   
    @Override
    protected void onResume()
    {
        super.onResume();
        oldConfigInt = 0;
    }
   
}