Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Stockage de ressources générées à l'exéc

    3 juillet 2015 à 18:22:50

    Bonjour,

    je viens de me mettre au dev android, sous Android Studio, et voilà ce que j'essaie de faire :

    un simple programme avec un bouton et une ligne de texte en dessous. Lors de l'appui sur le bouton, un chiffre est généré et affiché dessous / sur le bouton / nimporte où.

    Le soucis : je ne comprends pas comment passer le résultat du random que j'ai fait dans mon code java, dans le layout Xml afin d'afficher le résultat dans un TextView.

    package jlemattre.myapplication;
    
    //N'oubliez pas de déclarer le bon package dans lequel se trouve le fichier !
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
    
            int nombreAleatoire = 1 + (int)(Math.random() * ((20 - 1) + 1));
            String nombre = ""+nombreAleatoire;
            setContentView(R.layout.activity_main);
        }
    }

    Et le XML

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayoutxmlns:android="linearlayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
    <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/text"
    android:textStyle="bold"
    android:textColor="#FF0000"
    android:gravity="center"
    />

    </LinearLayout>

     Merci par avance, désolé si la question est bête, j'ai du mal à cerner la logique de dev android.



    • Partager sur Facebook
    • Partager sur Twitter
      3 juillet 2015 à 20:03:12

      En fait  lorsque tu fait setContentView(R.layout.activity_main) tu demande à afficher le layout qui a pour identifiant R.layout.activity_main. Cet identifiant est un int généré automatiquement à partir du nom du fichier de ton layout et qui est stocké dans la sous-classe layout de la classe R. Ton interface graphique va donc être construite en suivant le layout que tu a créé ainsi lorsque la méthode va lire:

      <TextView
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/text"
      android:textStyle="bold"
      android:textColor="#FF0000"
      android:gravity="center"
      />

      Elle va comprendre "créer un TextView (c'est une classe qui hérite de View de la même manière que sur pc où elle aurait hérité de JPanel avec swing) qui va remplir le parent horizontalement, qui a pour text @string/text, qui sera en gras...". Tu aurait aussi très bien pu créer ton interface graphique en java, en utilisant directement les constructeur des différentes vues.

      Donc comme je te l'ai dit il existe une classe TextView depuis laquelle on pourra manipuler la vue. Encore faut il pouvoir récupérer l'instance qui a été crée lors du setContentView pour cela il faut associé à ton textview une id qui sera elle aussi stockée dans la classe R. Il faut donc que tu rajoute un attribut xml à ton TextView:

      <TextView
        android:id="@+id/textViewPourLeNombre"
      ...

      Tu peut lui donner le nom que tu veut mais n'oublie pas que ce nom sera stocké dans R il faut donc que ce soit un nom de variable correct donc pas de "id/1textView" par exemple.

      Ensuite tu utilise cette id pour récupérer ta référence via la méthode findViewById(int id):

      protected void onCreate(Bundle param){
      //tu fait ton setContentView
      TextView txtView= (TextView) findViewById(R.id.textViewPourLeNombre);
      }

      Tu peut ensuite utiliser les méthode de txtView pour modifier le contenu du textView. Je te laisse pour cela voir la classe TextView dans la doc! (N'oublie pas de regarder les méthodes des classes parentes)

      http://developer.android.com/index.html

      -
      Edité par zero857 3 juillet 2015 à 20:27:05

      • Partager sur Facebook
      • Partager sur Twitter

      Ctrl+space

        4 juillet 2015 à 11:37:45

        Bonjour, merci beaucoup de ta réponse.

        J'ai essayé de mettre uniquement un TextView dans le Xml pour tester tout ça.

        Dans mon Java, quand je mets

                setContentView(R.layout.activity_main);
        

        il ne me trouve pas activity_main.xml, qui est pourtant bien dans le dossier layout de mon projet. Je suis un peu perdu.

        EDIT : j'ai fini par clean mon projet et compagnie car le soucis provenait que j'importais le R de base du SDK et pas celui de mon package.

        -
        Edité par sardaukar59 4 juillet 2015 à 11:50:24

        • Partager sur Facebook
        • Partager sur Twitter
          4 juillet 2015 à 12:57:13

          Il y a vraiment quelque chose qui m'échappe.

          Même en important bien MA VERSION de R, c'est à dire import monpackage.R , j'ai quand même des problèmes avec findViewById qui trouve bien mon fichier XML mais pas les id à l'intérieur.

          • Partager sur Facebook
          • Partager sur Twitter
            4 juillet 2015 à 14:37:33

            Donc si j'ai bien compris tu arrive bien à faire

            setContentView(R.id.activity_main);

            Mais pas

            findViewById(R.id.monBoutton);

            Vérifit bien que tu as rajouter android:"@+id/..." dans ton xml et essaye de sauvegarder ton projet. Sinon aucune ereur dans le xml? Et quelle est l'erreur que tu obtient lorsque tu fait findViewById() ?



            • Partager sur Facebook
            • Partager sur Twitter

            Ctrl+space

            [Android] Stockage de ressources générées à l'exéc

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown