Pregunta

Me estoy poniendo un extraño problema al actualizar mi ListView, funciona bien hasta que el dispositivo se gira y luego al actualizar de nuevo que va completamente en blanco. Esto sólo puede ser fijado por otra vez girar el dispositivo (como también se actualiza en onCreate()), pero luego siempre que su refrescado de nuevo se queda en blanco. Problema persiste hasta que se reinicie la aplicación.

EDIT:

Algunos código:

private ListView contactlist = null;
private static MatrixCursor matrixcursor = null;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    contactlist = (ListView) findViewById(R.id.contactlist);
    if (savedInstanceState == null) {
        matrixcursor = new MatrixCursor(new String[] {"_id","name","one","two","three","four"});
    } else {
        contactlist.setAdapter(new listCursorAdapter(this,matrixcursor));
    }
}

Esto funciona bien, pero siempre que sea:

contactlist.setAdapter(new listCursorAdapter(this,matrixcursor));

se llama después de onCreate() y después de que el dispositivo ha sido girado el ListView queda en blanco.

¿Fue útil?

Solución 2

Bueno, yo arreglé para fijarlo al hacer contactlist estática:

 private static ListView contactlist = null;

No tengo ni idea de por qué esto funcionó (acaba de hacer una prueba / error durante un par de horas) así que si alguien podría explicar que sería grande.

Otros consejos

Creo que su MatrixCursor en realidad es nula. Al girar el teléfono como saben se destruye la actividad. Por lo que el paquete savedInstanceState podría no ser nula, pero el MatixCursor entonces no consigue reinicializado. Sí, es estática, sino que tengo la sensación de que si por alguna posibilidad de que no está cargada en el mismo cargador de clases ... así que estática no va a ser demasiado fiable.

Hay un método que es el más torpemente nombrado:

onRetainNonConfigurationInstance ()

Lo que creo que le ayudará a resolver este caso. Así que si devuelve la instancia MatrixCursor allí, se puede en una llamada posterior a onCreate () el uso getLastNonConfigurationInstance () para leer de nuevo los datos. No está garantizado a ser llamado, por lo que aún tendrá que manejar el caso en el que haya ningún estado almacenado. Esperemos que esto ayuda.

private ListView contactlist = null;
private MatrixCursor matrixcursor = null;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    contactlist = (ListView) findViewById(R.id.contactlist);
    matrixcursor = (MatrixCursor)getLastNonConfigurationInstance();
    if (matrixcursor == null) {
        matrixcursor = new MatrixCursor(new String[] {"_id","name","one","two","three","four"});
    } else {
        contactlist.setAdapter(new listCursorAdapter(this,matrixcursor));
    }
}

public MatrixCursor onRetainNonConfigurationInstance() {
return matrixcuror;
}

public MatrixCuror getLastNonConfigurationInstance() {
return (MatrixCursor) super.getLastNonConfigurationInstance();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top