Utilisation de ButterKnife

Résolu
YameFAZE Messages postés 179 Date d'inscription   Statut Membre Dernière intervention   -  
YameFAZE Messages postés 179 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'essaye d'utiliser cette librairie mais je ne suis pas sûr d'avoir compris son fonctionnement.

Voici mon adaptation :
public class Start extends AppCompatActivity
{
@Bind(R.id.startActivity_conteneurScrollView) View startActivity_conteneurScrollView;

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);

setContentView(R.layout.start_activity);

ButterKnife.bind(this);

final Animation startActivity_animation = AnimationUtils.loadAnimation(this, R.anim.apparition);

final View startActivity_animation_affichage = findViewById(R.id.startActivity_conteneurScrollView);

startActivity_animation.setFillAfter(true);

startActivity_animation_affichage.startAnimation(startActivity_animation);


Déjà j'ai
@Bind
qui s'affiche en rouge malgré que j'ai update le gradle. Ensuite dois-je supprimer complètement
final View startActivity_animation_affichage = findViewById(R.id.startActivity_conteneurScrollView);
?

12 réponses

  1. BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 931
     
    Hello,

    J'essaye d'utiliser cette librairie
    Plutôt que d'essayer d'utiliser, pourquoi tu ne lis pas la doc? Je ne sais pas où tu as trouvé ce
    @Bind
    .

    Un bon point, quand même, l'utilisation de
    @BindView
    te dispense effectivement le
    findViewById()
    .
    0
  2. YameFAZE Messages postés 179 Date d'inscription   Statut Membre Dernière intervention  
     
    Donc j'ai juste à déclarer
    ButterKnife.bind(this);
    dans le
    onCreate
    de l'activité et remplacer
    final View startActivity_animation_affichage = findViewById(R.id.startActivity_conteneurScrollView);
    par
    @BindView startActivity_conteneurScrollView
    ?
    0
  3. YameFAZE Messages postés 179 Date d'inscription   Statut Membre Dernière intervention  
     
    Ah non... attends... je déclare
    @BindView(R.id.startActivity_conteneurScrollView) ScrollView startActivity_conteneurScrollView;
    dans la déclaration de l'activité, puis
    ButterKnife.bind(this);
    dans le
    onCreate
    de l'activité, et enfin je remplace
    final View startActivity_animation_affichage = findViewById(R.id.startActivity_conteneurScrollView);
    par
    final View startActivity_animation_affichage = startActivity_conteneurScrollView;
    ... c'est ça ?
    0
  4. YameFAZE Messages postés 179 Date d'inscription   Statut Membre Dernière intervention  
     
    Mouais... sauf que... ça fonctionne pour la
    ScrollView
    mais pas pour mon bouton qui suit. Donc, j'ai déclaré dans la classe :
    /* Déclaration de la classe "Start". */
    public class Start extends AppCompatActivity
    {
    /* Déclaration des différentes vues qui seront utilisées dans l'activité de la classe "Start". */
    @BindView(R.id.startActivity_conteneurScrollView) ScrollView startActivity_conteneurScrollView;
    @BindView(R.id.startActivity_boutonConnexion) Button startActivity_boutonConnexion;


    Puis pour la
    ScrollView
    j'ai écrit :
    /* Association de l'animation "apparition.xml" à la création de la constante "startActivity_animation" (de type "Animation"). */
    final Animation startActivity_animation = AnimationUtils.loadAnimation(this, R.anim.apparition);
    /* Association de la vue "startActivity_conteneurScrollView" à la création de la constante "startActivity_animation_affichage" (de type "View"). */
    final View startActivity_animation_affichage = startActivity_conteneurScrollView;
    /* Association des deux constantes. */
    startActivity_animation.setFillAfter(true);
    /* Lancement de l'animation. */
    startActivity_animation_affichage.startAnimation(startActivity_animation);


    Enfin pour le
    Button
    j'ai écrit :
    /* Association du bouton "startActivity_boutonConnexion" à la création de la constante "startActivity_boutonConnexion" (de type "Button"). */
    final Button startActivity_boutonConnexion = startActivity_boutonConnexion;
    /* Déclaration de ce qu'il doit se passer au clique du bouton. */
    startActivity_boutonConnexion.setOnClickListener(new View.OnClickListener()
    {


    Android Studio m'indique que
    startActivity_boutonConnexion
    n'est pas utilisé... bah pourtant si.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. YameFAZE Messages postés 179 Date d'inscription   Statut Membre Dernière intervention  
     
    Ah... autant pour moi. J'avais donné le même ID à la constante ET au bouton. ^^ Android Studio m'a crié dessus en disant "pas bien le redondant".
    0
  7. BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 931
     
    Presque ;)
    Ta dernière ligne ne sert à rien ;)
    0
  8. YameFAZE Messages postés 179 Date d'inscription   Statut Membre Dernière intervention  
     
    Quelle dernière ligne ?

    Par contre je ne comprends pas le fonctionnement de
    @OnClick
    ... tout doit-être déclaré dans le
    onCreate
    de l'activité ? Ou comme
    @BindView
    il y a une partie à déclaré dans la classe mère ?

    J'ai essayé de tout déclarer dans le
    onCreate
    de l'activité mais ça ne fonctionne pas :
    @OnClick(R.id.startActivity_boutonConnexion) void startActivity_boutonConnexion_contante
    {
    /* Création du lien "lien_Start_Index" entre les classes "Start" et "Index". */
    Intent lien_Start_Index = new Intent(Start.this, Index.class);
    /* Lancement de la translation. */
    startActivity(lien_Start_Index);
    }


    Et si c'est à faire en deux parties je ne vois pas comment faire le lien...
    0
  9. BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 931
     
    @BindView sert à binder une variable membre sur un composant graphique -> à faire dans la déclaration des membres
    @OnClick permet de lier un composant graphique à une méthode qui sera appelé lors de l'appui sur le composant.

    Un petit exemple ci-dessous.

    public class StartActivity extends AppCompatActivity {
    
        //UI
        @BindView(R.id.startActivity_conteneurScrollView)
        ScrollView startActivity_conteneurScrollView;
    
        //LIFE-CYCLE
        //////////////////////////
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.start_activity);
            ButterKnife.bind(this);
    
            //ici, tu peux utiliser startActivity_conteneurScrollView
        }
    
        //USER INTERACTION
        //////////////////////////
        @OnClick(R.id.startActivity_boutonConnexion)
        public void onConnexionClick() {
                /* Création du lien "lien_Start_Index" entre les classes "Start" et "Index". */
                Intent lien_Start_Index = new Intent(StartActivity.this, IndexActivity.class);
                /* Lancement de la translation. */
                startActivity(lien_Start_Index);
        }
    }
    
    


    @+ 
    Buno, Modo CS-CCM 
    L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai... 
    The urgent is done, the impossible is underway. For miracles, provide for a delay...
    0
  10. YameFAZE Messages postés 179 Date d'inscription   Statut Membre Dernière intervention  
     
    Ah d'accord. Il fallait mettre
    @OnClick
    au même niveau de code que
    protected void onCreate(Bundle savedInstanceState) {
    et pas dans
    protected void onCreate(Bundle savedInstanceState) {
    ... c'est ça que je n'avais pas compris. Merci pour cet éclaircissement. Par contre c'est normal qu'il m'indique que
    onConnexionClick
    n'est pas utilisé ?

    Et pour en revenir à cette ligne de code inutile pour les
    @BindView
    je ne vois pas de quelle ligne tu parles dans mon code.
    0
    1. BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 931
       
      Oui, c'est normal car la méthode n'est pas appelée par toi. C'est une callback qui sera appelée lors de l'appui sur le bouton.

      Je parlais de ce message, la ligne suivant n'a pas de raison d'être
      final View startActivity_animation_affichage = startActivity_conteneurScrollView;
      0
      1. YameFAZE Messages postés 179 Date d'inscription   Statut Membre Dernière intervention   > BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Euh bah si elle est utile cette ligne... elle fait partie de mon animation :
        //!\\ Apparition de l'activité. //!\\
        /* Association de l'animation "apparition.xml" à la création de la constante "startActivity_constanteAnimation" (de type "Animation"). */
        final Animation startActivity_constanteAnimation = AnimationUtils.loadAnimation(this, R.anim.apparition);
        /* Association de la vue "startActivity_conteneurScrollView" à la création de la constante "startActivity_constanteAffichage" (de type "View"). */
        final View startActivity_constanteAffichage = startActivity_conteneurScrollView;
        /* Association des deux constantes. */
        startActivity_constanteAnimation.setFillAfter(true);
        /* Lancement de l'animation. */
        startActivity_constanteAffichage.startAnimation(startActivity_constanteAnimation);


        Sinon comment je fais pour faire le lien avec l'animation. ^^
        0
  11. YameFAZE Messages postés 179 Date d'inscription   Statut Membre Dernière intervention  
     
    P.S. : J'ai trouvé un lien qui répertorie pas mal de librairies utiles : https://blog.engineering.publicissapient.fr/2014/10/22/android-les-bibliotheques-utiles/ Pas mal pour conserver une micro encyclopédie des librairies externes à connaître. :-)
    0
    1. BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 931
       
      Un post datant de 2014...je n'ai pas regardé mais c'est sûrement obsolète :P
      0
  12. YameFAZE Messages postés 179 Date d'inscription   Statut Membre Dernière intervention  
     
    Tu exagères. :-) Cela donne quand même un bon aperçu des librairies.
    0
  13. YameFAZE Messages postés 179 Date d'inscription   Statut Membre Dernière intervention  
     
    En conclusion Butter Knife simplifie pas mal de choses. :-) Dommage que l'on ne puisse pas tout simplifier comme ça. J'aurais pu aussi de la même manière simplifier l'animation si cela avait été possible.
    0
    1. BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 931
       
      Voilà.
      A noter qu'il y a aussi le même principe pour les paramètres d'Intent: Dart

      N'hésites pas à passer ce topic en résolu si c'est le cas.
      0
      1. YameFAZE Messages postés 179 Date d'inscription   Statut Membre Dernière intervention   > BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Dernière chose, concernant
        final View startActivity_animation_affichage = startActivity_conteneurScrollView;
        , je ne peux pas la supprimer cette ligne puisqu'elle fait partie de mon animation. Si je la supprime mon animation crash.
        //!\\ Apparition de l'activité. //!\\
        /* Association de l'animation "apparition.xml" à la création de la constante "startActivity_constanteAnimation" (de type "Animation"). */
        final Animation startActivity_constanteAnimation = AnimationUtils.loadAnimation(this, R.anim.apparition);
        /* Association de la vue "startActivity_conteneurScrollView" à la création de la constante "startActivity_constanteAffichage" (de type "View"). */
        final View startActivity_constanteAffichage = startActivity_conteneurScrollView;
        /* Association des deux constantes. */
        startActivity_constanteAnimation.setFillAfter(true);
        /* Lancement de l'animation. */
        startActivity_constanteAffichage.startAnimation(startActivity_constanteAnimation);
        0
      2. BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 931 > YameFAZE Messages postés 179 Date d'inscription   Statut Membre Dernière intervention  
         
        Si tu supprimes la ligne, et que tu remplaces les
        startActivity_animation_affichage
        par
        startActivity_conteneurScrollView
        , ça doit marcher pareil, non?
        Mais bon, c'est un "faux problème".
        0
      3. YameFAZE Messages postés 179 Date d'inscription   Statut Membre Dernière intervention   > BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention  
         
        J'ai essayé mais ça ne fonctionne pas pour la suppression de la ligne. Android n'arrive pas à faire le lien. Donc je laisse comme ça. C'est pas dramatique. :-)
        0