IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Constructeur avec arguments


Sujet :

Android

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2014
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2014
    Messages : 66
    Points : 33
    Points
    33
    Par défaut Constructeur avec arguments
    Bonjour,

    je travaille sur android actuellement et je bloque sur un point : l'appel à un constructeur de vue (avec paramètres notamment) dans mon MainActivity.
    Mon constructeur s'appelle Dessine(Context context, int nbCases) et mon application fonctionne même quand je ne l'appelle pas (la ligne drawdessin =new Dessine(this,2); ne semble pas prise en compte)dans mon onCreate.
    Je ne sais pas si je suis très limpide, je débute mais je voudrais pouvoir gérer la variable nombreCasesDessinees avec mon constructeur et pas avec la l'ajout dans mon onCreate des lignes suivantes "dessin=(Dessine) findViewById(R.id.draww);dessin.modifVariable(2);" (modifVariable(y) étant une méthode public de la classe Dessine qui fait this.nombreCasesDessinees =x. Ca fera plus programmation objet comme ça
    Comment modifier aussi mes fichiers xml mainlayout, qui contient un spinner et ma vue fr.monpackage.Dessine, et surtout mon attr.xml qui apparaissent indispensables pour pouvoir instancier mon constructeur j'ai l'impression.
    Actuellement j'ai nombreCasesDessinees=6 selon les sources ci-dessous. Je voudrais ne pas avoir une valeur statique mais dynamique issue de l'instanciation de Dessine(this,z) dans mon onCreate de mon MainActivity.
    A savoir que je ne maîtrise pas la méthode init dans Dessine.java, j'ai récupéré le code. Mon attr.xml est aussi incertain ... C'est un peu mon problème. Je débute

    Voici mon mainlayout.xml et attr.xml (je n'arrive pas à mettre les xml en pièces jointes):

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:comName="http://schemas.android.com/apk/res/fr.monpackage"
     
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
     
     <Spinner 
        android:id="@+id/spinner1"   
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"></Spinner>
     
    <fr.monpackage.Dessine
        android:id="@+id/draww"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        comName:one="6" />
     
    </LinearLayout>


    attr.xml :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <declare-styleable name="Dessine">
        <attr name="one" format="integer"/>
    </declare-styleable>    
    </resources>

    Je n'arrive pas à prévisualiser le message, je mets le MainActivity.java et le Dessine.java au cas où :
    package fr.monpackage;

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    import java.util.ArrayList;
    import java.util.List;
    import android.os.Bundle;
    import android.app.Activity;
    import android.widget.Spinner;
    import android.widget.ArrayAdapter;
     
    public class MainActivity extends Activity{
        Dessine drawdessin;
    	private Spinner selecti=null;
     
    	@Override
    	protected void onCreate(Bundle saveInstanceState){
    		super.onCreate(saveInstanceState);
    		drawdessin =new Dessine(this,2);
    		setContentView(R.layout.mainlayout);
    		selecti=new Spinner(this);
    		selecti=(Spinner) findViewById(R.id.spinner1);
    		List<String> exemple=new ArrayList<String>();
    		exemple.add("1");
    		exemple.add("2");
    		ArrayAdapter<String> adapter =new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,exemple);
    		selecti.setAdapter(adapter);
    	}
     
     
    }





    Dessine.java :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    package fr.monpackage;
     
     
    import android.graphics.Canvas;
    import android.graphics.Paint;
    import android.view.View;
    import android.content.Context;
    import android.content.res.TypedArray;
    import android.graphics.Color;
    import android.util.AttributeSet;
     
     
     
    public class Dessine extends View{
     
    	public int nombreCasesDessinees;
    	Paint p=new Paint();
     
    	public  Dessine (Context context){super(context);}
    	public Dessine(Context context,int cases) {
    		  super(context);
    		  this.nombreCasesDessinees=cases;
    		}
     
    	public Dessine(Context context, AttributeSet attrs) {
    		  super(context, attrs);
    		  init(attrs);
    		}	
     
     
    		public Dessine(Context context, AttributeSet attrs,int cases) {
    			super(context, attrs);
    			init(attrs);
    			this.nombreCasesDessinees=cases;
    		}
     
    		private void init(AttributeSet attrs) {
    		  TypedArray attr = getContext().obtainStyledAttributes(attrs, R.styleable.Dessine);		 
    		  int tmpOne = attr.getInteger(R.styleable.Dessine_one, 0);
    		  this.nombreCasesDessinees=tmpOne;
    		}
     
     
    		public void modifVariable(int x) {
    			this.nombreCasesDessinees=x;
    			}
     
     
    	protected void onDraw (Canvas c){
     
                int temp=nombreCasesDessinees*20;
                p.setColor(Color.CYAN);
                c.drawLine(0,10,temp,10,p);
    	}
     
    }






    Merci!

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 86
    Points : 67
    Points
    67
    Par défaut
    Bonjour,
    si tu veux appelé ton view avec des parametre le truc le plus simple est d'utiliser des extra tu peux mettre ton objet de dessins dans une vue et tu l'appelle en lui envoyant un extra et le load dans le composant que tu veux

    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      Intent i = new Intent(classeCourrante.this, Dessin.class);   
      int value= 2;
      i.putExtra("value", value)
    et dans ta view de dessin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     int extra = getIntent().getIntExtras("value");
    //....

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2014
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2014
    Messages : 66
    Points : 33
    Points
    33
    Par défaut
    Merci pour la réponse, mais je dois toucher à mon manifest.xml? Ca serait embêtant, pour une simple instanciation,si c etait le cas.
    Le getIntent() ne fonctionne pas dans ma classe Dessine : la méthode n est pas définie pour le type Dessine
    Mais j'arrive pas à croire qu'on ne puisse pas appeler un constructeur de vue avec un int en argument, quitte à s'occuper (je ne sais pas de quelle manière) des fichiers xml.

    Ca doit être possible??

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 33
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par 2001hal Voir le message
    Le getIntent() ne fonctionne pas dans ma classe Dessine : la méthode n est pas définie pour le type Dessine
    getIntent() : Return the intent that started this activity. (doc android)

    Hors la ta classe Dessine est une view et pas une activity.

    Si j'ai bien compris tu veux savoir le nombre de vue (Dessine) que tu crées ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2014
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2014
    Messages : 66
    Points : 33
    Points
    33
    Par défaut
    Ok, je comprends mieux, merci.
    Je veux savoir comment instancier avec un paramètre entier (en s occupant ou non de mes fichiers xml) ma classe Dessine depuis mon MainActivity.
    Du genre :" varDsMonMainActivity=new Dessine(this,2);" avec des répercussions sur ma vue, que l'argument 2 soit pris en compte.

Discussions similaires

  1. Template C++ constructeur avec arguments
    Par oc_alex86 dans le forum Débuter
    Réponses: 6
    Dernier message: 06/11/2010, 15h45
  2. Probleme de constructeur avec argument
    Par juloss dans le forum C++
    Réponses: 4
    Dernier message: 29/01/2008, 20h55
  3. [prog dynamique]Constructeur avec type primitif
    Par -=Spoon=- dans le forum Langage
    Réponses: 2
    Dernier message: 16/12/2004, 11h33
  4. Réponses: 7
    Dernier message: 30/09/2004, 13h55
  5. [C#] Equivalent Property avec arguments de VB.NET
    Par Antz dans le forum Windows Forms
    Réponses: 4
    Dernier message: 26/03/2004, 14h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo