¿Cómo mantengo la visibilidad del botón al regresar de otra actividad?

Mi código:

@Override
protected void onStop() {
        super.onStop();

        SharedPreferences btVis = getSharedPreferences(BUTT_VIS,0);
        SharedPreferences.Editor edit = btVis.edit();
        edit.putString("btS1",btSub1.getVisibility()+"");
    }

    @Override
    protected void onResume() {
        super.onResume();

        SharedPreferences btVis = getSharedPreferences(BUTT_VIS,0);
        int btS1 = Integer.parseInt("View." +btVis.getString("btS1",""));
        btSub1.setVisibility(btS1);    
    }

Recibo un error porque, por ejemplo, setVisibility debe tener el formato View.(VISIBILITY). Pero analicé btS1 como int en el formato View.(VISIBILITY), así que no sé por qué no funciona. ¿Cómo puedo solucionar esto?

1
Win 13 dic. 2016 a las 13:42

2 respuestas

La mejor respuesta

Prueba este en el método onResume ().

@Override
protected void onResume() {
    super.onResume();

    SharedPreferences btVis = getSharedPreferences(BUTT_VIS,0);
    int visibility = Integer.parseInt(btVis.getString("btS1",""));
    switch(visibility){
    case View.VISIBLE: //make button visible
    break;
    case View.INVISIBLE: //make button invisible
    break;
    }

}

Asegúrese de confirmar el editor al final del método onStop ()

0
chetan 13 dic. 2016 a las 11:09

Olvidó llamar a editor.commit();, lo que significa que su int nunca fue realmente guardado.

@Override
protected void onStop() {
    super.onStop();

    SharedPreferences btVis = getSharedPreferences(BUTT_VIS,0);
    SharedPreferences.Editor edit = btVis.edit();
    edit.putString("btS1",btSub1.getVisibility()+"");
    editor.commit();
}

Editar:

Veo que tu tambien hiciste algo mal

int btS1 = Integer.parseInt("View." +btVis.getString("btS1",""));

Si bien obtiene la identificación a través de la clase View, no necesita obtenerla de sus preferencias compartidas de esa manera. Ya acaba de almacenar el Integer al que se hace referencia en View.GONE y View.Visisble.

Para que esto funcione solo necesitas:

int btS1 = Integer.parseInt(btVis.getString("btS1",""));

Pero no veo por qué lo analizaría en un String y luego lo analizaría de nuevo en un int. También haría el ahorro en OnPause en lugar de OnStop. Tan completamente reelaborado que deberías hacer esto:

@Override
protected void onPause() {
    super.onPause();

    SharedPreferences btVis = getSharedPreferences(BUTT_VIS, 0);
    SharedPreferences.Editor edit = btVis.edit();
    edit.putInt("btS1", btSub1.getVisibility());
    edit.commit();
}

@Override
protected void onResume() {
    super.onResume();

    SharedPreferences btVis = getSharedPreferences(BUTT_VIS, 0);
    int btS1 = btVis.getInt("btS1", 0);
    btSub1.setVisibility(btS1);    
}
2
Raymond 13 dic. 2016 a las 11:12