Question

Je reçois un problème bizarre lors de l'actualisation de mon ListView, cela fonctionne bien jusqu'à ce que l'appareil tourne et puis quand il rafraîchissant à nouveau il va complètement vide. Cela ne peut être fixé par la rotation du dispositif à nouveau (comme il est également actualisé en onCreate()) mais chaque fois son nouveau rafraîchi, il se vide. Problème persiste jusqu'à ce que l'application redémarre.

EDIT:

Une partie du code:

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));
    }
}

cela fonctionne très bien, mais à chaque fois:

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

est appelé après onCreate() et après que le dispositif a été tourné le ListView se vide.

Était-ce utile?

La solution 2

Eh bien, je réussi à le réparer en faisant contactlist statique:

 private static ListView contactlist = null;

Je ne sais pas pourquoi cela a fonctionné (juste fait un essai / erreur pendant quelques heures) donc si quelqu'un pourrait expliquer ce serait génial.

Autres conseils

Je pense que votre MatrixCursor est en fait nulle. Lorsque vous faites pivoter le téléphone comme vous le savez l'activité est détruite. Ainsi, le faisceau savedinstanceState pourrait ne pas être nulle mais le MatixCursor ne soit pas alors réinitialisée. Oui il est statique, mais j'ai un sentiment si pour une certaine chance, il est pas chargé dans le même classloader ... bien que statique ne va pas être trop fiable.

Il existe une méthode qui est le plus gauchement nommé:

onRetainNonConfigurationInstance ()

Ce que je pense vous aider à résoudre ce cas. Donc, si vous retournez votre instance MatrixCursor là, vous pouvez dans un appel plus tard à onCreate () utilisez getLastNonConfigurationInstance () pour lire les données arrière. Il est pas garanti d'être appelé, vous aurez toujours besoin de gérer le cas où vous n'avez pas état stocké. Espérons que cela aide.

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();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top