[JAVA] Résumé de l'utilisation de FragmentArgs

introduction

J'ai appris une bibliothèque utile pour mettre en œuvre des applications Android, je vais donc résumer comment l'utiliser. ** Le contenu sera mis à jour séquentiellement **.

L'environnement de développement est le suivant.

Qu'est-ce que Fragment Args?

Lorsque vous essayez d'implémenter une application, vous souhaiterez peut-être transmettre un argument au moment de la transition d'écran. Normalement, il est stocké dans Intent ou Bundle sous la forme "Key: value" et transmis lors de la transition. ** À mesure que le nombre d'écrans et d'arguments augmente, le code devient plus long et moins lisible **. ~~ En premier lieu, lorsque la quantité de code augmente, diverses erreurs etc ... ~~

Fragment Args joue un rôle actif dans de telles situations. ** FragmentArgs génère automatiquement une classe de générateur à partir de Fragment, Simplifiez l'échange de données entre les fragments ** Le fera.

Comment installer Fragment Args

Pour la méthode d'installation, je me suis référé à la page git. Pour installer FragmentArgs, ajoutez le contenu suivant.

build.gradle(Project)


dependencies{
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.7'  
}

allprojects {
    repositories {
        maven {  url "https://oss.sonatype.org/content/repositories/snapshots/"  }
    }
}

build.gradle(app)


apply plugin: 'com.neenbedankt.android-apt'

dependencies {
    compile 'com.hannesdorfmann.fragmentargs:annotation:3.0.2'
    compile 'com.hannesdorfmann.fragmentargs:bundler-parceler:3.0.2'
    apt 'com.hannesdorfmann.fragmentargs:processor:3.0.2'
}

Comment utiliser FragmentArgs

Flux de traitement approximatif

  1. (Appelant) Générez une destination de transition à l'aide de la classe Builder. À ce stade, la valeur à transmettre est utilisée comme argument.
  2. (Appelé) Obtenez la valeur transmise dans FragmentArgs.inject (this) </ code>.
  3. (Appelé) Stockez la valeur acquise dans la variable avec @Arg </ code>.

Comment passer une valeur (lors du passage de userName, age à MyFragment)

   MyFragment myFragment = new MyFragmentBuilder(userName,age).build();

MyFragmentBuilder est une classe générée automatiquement par FragmentArgs. Il est généré en faisant [Run: app], alors exécutons-le sans nous soucier d'une erreur au début. Si ** builder n'est pas généré, essayez la méthode ** introduite dans Astuces.

Comment recevoir la valeur

  • Déclarez une variable (userName, age cette fois) pour stocker la valeur reçue. FragmentArgs générera une classe de générateur à partir des champs ci-dessous.
  @Arg
	String userName;
    @Arg
	int age;

À ce stade, si vous écrivez @Arg (required = false) </ code>, vous pouvez en faire un argument facultatif. Vous pouvez également ajouter private </ code> à la variable. Dans ce cas, n'oubliez pas de préparer setter, getter </ code>.

  • Stocker dans la variable déclarée (décrite dans OnCreate)
FragmentArgs.inject(this)

Le code ci-dessus correspond à getArgments () </ code> et est affecté à la variable avec @Arg </ code>.

En résumé, le code est le suivant.

  • Pour le moment, n'oubliez pas d'ajouter @FragmentWithArgs </ code> avant le nom de la classe.

myFragment.java



@FragmentWithArgs
public class myFragment extends Fragment {

    @Arg
    String userName;

    @Arg
    int age;

    public myFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FragmentArgs.inject(this);
    }

Tips

Que faire si le générateur n'est pas généré automatiquement

La description de Gradle est peut-être incorrecte. Vérifions à nouveau l'emplacement de la description et le contenu de la description (ver, etc.).

  • Faites attention aux erreurs dans la description d'apt et d'annotationParser.

Si la description est correcte, cela peut fonctionner en nettoyant le projet. Pour Android Studio: Vous pouvez nettoyer le projet en sélectionnant [Menu] → [construire] → [nettoyer le projet].

Ordre des arguments lors du passage des valeurs

Fondamentalement, les constructeurs sont générés dans l'ordre déclaré dans Fragment. Assurez-vous que l'ordre des arguments dans le générateur correspond à l'ordre des variables avec Arg </ code> dans le fragment.

Pour une raison quelconque, mon code est construit dans le désordre donc j'en recherche la cause. ..

Lors de l'utilisation de DialogFragment

Si vous souhaitez transmettre une valeur à une classe qui hérite de DialogFragment, écrivez FragmentArgs.inject (this) </ code> dans OnCreateDialog () </ code>. Cela passe l'activité, alors remplacez this </ code> par getActivity () </ code> si nécessaire.

Recommended Posts