0
votes

Qu'est-ce qui diffère le bouton de haut sur le bouton arrière? Et comment maquillage bouton fonctionne comme un bouton de retour?

en termes de la manière dont chaque bouton traite les activités? Quelles sont les différences?

J'ai 3 activités (appelons-les a, b et c). A est le parent de B et B est le parent de C's C et une intention prenant un supplément à la prochaine activité. J'y vais d'A à B, puis B à C. Lorsque j'essaie de revenir en arrière à l'aide du bouton UP, l'application se bloque, et c'est parce qu'il essaie d'obtenir une info de l'extra de l'intention. P>

mais Lorsque j'utilise le bouton arrière, cela fonctionne (???) et je ne sais pas pourquoi. P>

J'ai essayé de faire fonctionner le bouton de travail comme le bouton arrière, procédez comme suit: P>

    Intent intent = getIntent();
    if (intent.hasExtra("clickedUser")){
        otherUser = intent.getParcelableExtra("clickedUser");
        otherUserId = otherUser.getUid();
        otherUserName = otherUser.getUsername();
    }
    if (intent.hasExtra("loggedUser")){
        loggedUser = intent.getParcelableExtra("loggedUser");
        loggedUserId = loggedUser.getUid();
    }


12 commentaires

Avez-vous une erreur lorsque vous dites que cela ne fonctionne pas? Pouvez-vous partager votre journal s'il y a une erreur! :)


@Anmol Ye, je reçois une erreur. Je ne pense pas que cela aidera beaucoup parce que c'est un peu spécifique. Lorsque je démarre l'activité B, je reçois un supplément de l'intention créée dans un et obtenez-en une information. Depuis que je viens d'activité C, je pense que cette information supplémentaire de l'intention est perdue et que je reçois une nullpointerexception (et je ne sais pas pourquoi cela ne se produit pas lorsque j'utilise le bouton arrière). Quoi qu'il en soit, j'ajouterai le message du journal :)


Ce n'est pas le problème du dos, ne terminez pas l'activité et je pense que vous avez terminé une activité que la précédente toutes les activités perdent leurs valeurs et getansername () est null.


@farhana j'avais oublié de finir () b activité comme je commence à C. Maintenant, il travaille partiellement, mais de C, il revient à A (et B est le parent de C, et je l'ai vérifié)


@ Joãovítor N'ajoutez pas terminé () Si vous avez fini d'activité, vous perdrez toute valeur sur l'activité précédente.


@farhana vient de remarquer que Hahah je n'ai pas vraiment obtenu ce que vous avez dit dans votre dernier commentaire


@ Joãovítor Avez-vous résolu un problème?


@farhana non, je suis toujours coincé sur ça


@ Joãovítor Vous obtenez toujours la même erreur pour une meilleure approche, il est préférable de télécharger plus de code.


@farhana j'ai ajouté un autre code. Vérifiez si cela aide à comprendre le problème s'il vous plaît


Vous commencez l'activité en utilisant starttactivityforresult si cela est utilisé, vous devez implémenter "OnActivityResult" pour obtenir un résultat sur cette activité où vous utilisez "StartActivityForresult" et selon votre journal d'erreur " / Code> Vous obtenez le nom du nom d'utilisateur NULL. Vous devez donc vérifier où vous obtenez l'objet de classes modèles pour `getansername`


@Farhana J'essaie de l'obtenir de l'intention, mais l'extra est ajouté dans l'activité A, et je ne sais pas comment le récupérer lors de l'activité C. Lorsque vous utilisez le bouton arrière, tout fonctionne bien, mais pas lorsque vous utilisez bouton up. J'ai essayé d'utiliser StartActivityForresult pour le récupérer sur OnActivityResult, mais cela n'a pas fonctionné non plus


3 Réponses :


0
votes

Essayez de changer votre code comme suit pour simuler le comportement du bouton arrière:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case android.R.id.home:
            onBackPressed();
            return true;
    }
    return super.onOptionsItemSelected(item);
}


3 commentaires

J'ai ajouté le journal d'erreur à la fin de la question :)


Il dit que instance instance useractivity est null. Je pense que le problème n'est pas lié au bouton arrière, ... veuillez partager des parties du code à partir de userAppittivité .


Je ne pense pas que cela aidera beaucoup parce que c'est un peu spécifique. Lorsque je démarre l'activité B, je reçois un supplément de l'intention créée dans un et obtenez-en une information. Depuis que je viens d'activité C, je pense que cette information supplémentaire de l'intention est perdue et que je reçois une nullpointerexception (et je ne sais pas pourquoi cela ne se produit pas lorsque j'utilise le bouton arrière).



0
votes

La principale différence entre le haut et le dos n'est pas visible lorsque vous utilisez l'application régulièrement.

mais par exemple, si vous ouvrez une activité de détail à partir d'un lien, l'application s'ouvre avec juste l'activité de détail. Maintenant, si vous appuyez sur le bouton arrière de la barre d'outils, vous pouvez arriver:

  • up NAVIGATION signifie que vous montrez dans la hiérarchie, donc au parent de l'activité de détail, comme une activité domestique.
  • retour NAVIGATION signifie que vous revenez là où vous étiez auparavant, de sorte que cela signifierait de retourner à la dernière application utilisée, comme le navigateur que vous avez ouvert le lien de.

    C'est à vous que vous puissiez implémenter cela, vous devez donc décider de ce qui serait plus logique ou utile aux utilisateurs de votre application.

    et aussi essayé d'utiliser Navutils.navigatefromsametask (this) mais c'est ne fonctionne pas non plus. Comment puis-je le résoudre?

    Ceci est probablement parce que vous n'avez pas défini d'activité parent pour l'activité que vous êtes actuellement intégré.

    regarder Le tutoriel (en particulier la section Spécifier le parent ), où tout est décrit en détail sur la navigation.


    modifier après avoir fourni la trace de la pile:

    SO Up Navigation fonctionne pour vous, seule l'activité que vous naviguerse pour attendre une sorte de Utilisateur dans son Oncreate (...) méthode. Vous devez vous assurer que vous fournissez toutes les données à l'activité parent.

    Si vous fournissez des données via des intentions, vous pouvez utiliser le code suivant pour ouvrir le parent: xxx


7 commentaires

Zolnei c'est ce que je suppose, mais dans ce cas, je commence toujours l'activité C de l'activité B, ce qui signifie (je suppose) que les boutons de haut et arrière doivent fonctionner de même, mais ce n'est pas le cas. Et j'ai eu la définition du parent B comme C dans le manifeste :(


Jetez un coup d'œil à l'utilisateurActivity.java Line 67, votre objet utilisateur est null là-bas. Vérifiez pourquoi cela peut arriver, vous essayez probablement de l'obtenir de l'intention, ce qui n'a pas d'objet utilisateur.


Vous essayez de l'obtenir de l'intention, mais l'extra est ajouté dans l'activité A, et je ne sais pas comment le récupérer lors de l'activité C. Lorsque vous utilisez le bouton arrière, tout fonctionne bien, mais pas lors de l'utilisation de bouton


Je n'ai pas reçu ce que ce code est censé faire. Quand je l'ai ajouté quand j'ai essayé d'aller de A à B, il continuait de retourner à A.


Si vous l'avez dans votre activité de détail, vous pouvez faire la navigation en démarrant l'activité parent avec l'intention (y compris les données utilisateur) et en finissant l'activité de détail.


Suis-je censé l'ajouter comme ça? Je l'ai fait et ça continue de retourner à son parent


Pas nécessairement. Comme je l'ai dit plus tôt, la fixation de l'accident résoudra votre problème. Vous devez vous assurer que le surnement a la propriété ClipUser avec les données utilisateur ou réécrire l'acceptation de laactivité qu'elle fonctionne sans ClickUser



0
votes

Je viens de supprimer la relation parentale entre B et C et utilisé le code OnOptionSelected () que j'ai posté et cela a fonctionné. Même lors de l'utilisation de cela, la fabrication du parent de B C faisait crash.

Je ne sais toujours pas pourquoi utiliser Button Button Works and Up Button n'est pas, mais cela corrige le problème. Merci à tous ceux qui ont essayé d'aider


0 commentaires