J'ai un problème avec une grille de grille assez grosse. (environ 70 enfants) Le GridView fonctionne bien si je le démarre sur Oncreate ou après avoir reprisé après avoir appuyé sur le bouton Accueil, puis revenez. Mais lorsque je reprends après avoir revenu du mode veille, ma base de base recommence et ruine les modifications que je l'ai faites pendant l'exécution. Cela fait aussi getchlildat () donner une nullpoinpoinpointexception si je l'appelle juste après le redémarrage.
Comment puis-je faire simplement faire ce que l'on parsause régulière (Bouton à domicile) fait sur la grille et éviter que la grille soit essuyée à chaque fois que je Je reprends du mode veille? P>
EDIT: J'ai essayé de définir un wakelock pour ma classe d'activité qui appelle la base à la base sans chance p>
2.DIT: Depuis que j'ai posté cette question, j'ai joué avec tentative de restauration de la GridView en utilisant ce code en Onpause: et ceci à OnResume: p> La chose étrange est tout ce que je semble avoir sauté d'un endroit à un autre sur L'écran et il plante toujours quand j'essaie de getchildat (). Ça ne l'a pas encore échoué après le mode veille. P> Public View GeveView (INT POSITION, VIEWVVIEW, VIEWGROUP Parent) { P>
gridView= new BoxView(this);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH){
w.getDefaultDisplay().getSize(size);
Measuredwidth = size.x;
Measuredheight = size.y;
}else{
Display d = w.getDefaultDisplay();
Measuredwidth = d.getWidth();
Measuredheight = d.getHeight();
}
int width = Measuredwidth/7*6;
gridView.setLayoutParams(new GridView.LayoutParams(width,LayoutParams.FILL_PARENT, Gravity.CENTER_HORIZONTAL));
gridView.setNumColumns(columns);
gridView.setVerticalSpacing(0);
gridView.setHorizontalSpacing(0);
gridView.setPadding(0, 0, 0, 0);
gridView.setId(101);
gridView.setSelector(android.R.color.transparent);
gridView.setAdapter (new ImageCellAdapter(this, MAP));
4 Réponses :
Vous pouvez utiliser BUNDLE Statue)
Pour enregistrer l'état de votre gridview puis dans Oncreate Une fois que vous avez défini l'adaptateur sur GRDIVIVIEW Ajouter ce code P> if (savedInstanceState != null) {
Parcelable state = savedInstanceState.getParcelable("state");
if (state != null) {
gridView.onRestoreInstanceState(state);
Log.d(this.getClass().getName(), "state restored!");
}
}
@Magakahn fait cette aide? Stackoverflow.com/questions/3469947 / ...
@Logray fait! S'il vous plaît dites-moi si je dois poster logcat ou plus de code
J'ai remarqué une chose dans votre code: même si corrigez-le avant de partir avec vous. p> Si vous souhaitez que votre GridView soit à l'intérieur d'une linearlayout, essayez ceci: p> voici la bonne implémente de Cette réponse : p> gridview code> est un
groupe de vue code>, vous ne pouvez pas accéder à ce que c'est
LayoutParams code>. Il suffit de penser que cela est possible, si cela serait possible, cela signifie que vous pouvez mettre un
gridview code> à l'intérieur d'un autre
gridview code>. P>
Merci beaucoup! Je n'ai jamais pensé à ça. Je l'ai remplacé par une relativation au lieu de linéarlayout, mais je ne génère pas de grille de grille à l'intérieur d'une autre.
Le problème est que si vous obtenez 2 upvotes, vous obtenez la prime. Je suis assez bas sur la réputation en ce moment, et cela n'a pas fait de différence. Je vous donne +1 lorsque la prime est terminée :)
Je sais déjà comment utiliser les méthodes d'instance de sauvegarde et de restauration. Ce que j'ai besoin de savoir, c'est quoi sauver et comment le restaurer après.
+1 pour la recherche et l'erreur que je n'étais pas au courant. Mais la réponse n'a pas résolu mon problème, et donc vous n'obtenez pas la prime ... cette fois;)
Votre application fonctionne en mode paysage? P>
Si oui, vous devriez envisager d'ajouter la balise p>
"android: configchange =" clavier | keyboardHidden | orientation " code> pour votre activité dans Manifest.xml, qui empêchera le système Android de tuer votre activité et de le redémarrer lorsque vous déverrouillez l'écran. p>
Pas bien. Cela fonctionne pour webview (j'ai utilisé ce code pour webview avant) mais pas sur mon gridview.
Essayez d'utiliser cette balise:
Ajout de taille d'écran aux autres réponses résolvées mon problème! Merci beaucoup et faire bon usage de la prime;)
Vous ne voulez pas conserver l'énorme grille de grille lorsque votre activité est détruite, car cela conduira à des situations hors mémoire. Comment remplissez-vous la vue?
@TAD, je dois l'avoir ce grand (je fais un jeu basé sur la grille) et il doit être visible tout le temps et montrer tous les enfants en même temps. L'utilisation d'une autre vue me rendra des jours de retour.
Je demande: Comment remplissez-vous la vue lorsque votre activité commence? Dans une base de données, un fichier de sauvegarde, quoi que ce soit?
@TAD, je le remplissais par un baseeaderapter. Chaque enfant a une ressource en arrière-plan et une imageuresource. Ceci est basé sur un tableau. Je n'ai eu aucun problème avec le manque de mémoire jusqu'à présent. (J'utilise des tiroirs qui utilise uniquement quelques octets chacun)
Oh, la taille de la vue n'est pas un problème; Cela empêche la vue après que l'activité soit détruite, c'est un problème. Cela me semble que vous devez lire sur le cycle de vie de l'activité et gérer l'état de l'état de votre jeu dans la méthode de l'onpause, puis renseigner le réseau de la grille dans votre méthode OnResume / OnrestoreInstate. Je peux écrire une vraie réponse avec plus de détails si vous le souhaitez.
@tad ce serait génial! J'ai été coincé avec ce problème pendant une semaine. Si vous faites un exemple de travail, je l'approuverais certainement et donnez-le +1
une grille volatile dans un monde volatil XD