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

Composants graphiques Android Discussion :

Agir sur une activité depuis une View personalisée


Sujet :

Composants graphiques Android

  1. #1
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut Agir sur une activité depuis une View personalisée
    Bonjour à tous,

    J'ai réaliser un widget perso en étendant la classe View. Ce widget surcharge la méthode onTouchEvent();

    Dans cette méthode j'agi sur mon widget , mais j'aurais également besoin d'agir sur d'autres éléments de mon activité (typiquement cocher ou non des radiobutton).

    Mon widget recevant le contexte de l'activité qu'elle est la meilleure solution sachant que j'aimerais garder ma gestion d’évènement dans mon widget (et non pas dans une classe dérivée écrite dans l'activité) ?

    J'avais penser à une ou plusieurs méthode statique dans l'activité.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Salut.
    Tu parle de widget au sens android???

    Ou d'une view que tu affiche dans ton activity?

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Je parle d'un widget comme peut l'être une progressBar, un bouton , etc . C'est le terme que j'ai vu employé dans un bouquin , mais peut être fais je erreur.

    Par exemple :

    Soit l'activité A :
    Code : 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
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:background="@drawable/bg">
     
     
    	<my.pocket.widget.Timeline 
    		android:layout_width="fill_parent"
    		android:layout_height="wrap_content"
    		android:id="@+id/timeline">
    	</my.pocket.widget.Timeline>
     
    </LinearLayout>
    J'aimerais pouvoir agir sur les éléments de l'extrait xml ci dessus depuis la classe qui défini Timeline :

    Code : 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
    public class Timeline extends View 
    {
     
    	private Context context;
     
    	public Timeline(Context context,AttributeSet attrs, int defStyle) 
    	{
    		super(context,attrs,defStyle);
    		this.context = context;
    		this.init();
    	}
     
    	public Timeline(Context context, AttributeSet attrs)
    	{
    		super(context,attrs);
    		this.context = context;
    		this.init();
    	}
     
    	public Timeline(Context context)
    	{
    		super(context);
    		this.context = context;
    		this.init();
    	}
     
    	/**
             * Initialise le paint
             */
    	private void init()
    	{
    		this.paint 	= new Paint();
    		paint.setColor(0xFF0b6393);
    		paint.setStyle(Paint.Style.FILL);
    	}
     
    	@Override
    	public boolean onTouchEvent(MotionEvent event) 
    	{
    		//ICI Agir sur les éléments du XML de l'activité
    		return true;
    	}
     
    	@Override
    	protected void onDraw(Canvas canvas) {
     
    	}
     
     
    }
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par grunk Voir le message
    Je parle d'un widget comme peut l'être une progressBar, un bouton , etc . C'est le terme que j'ai vu employé dans un bouquin , mais peut être fais je erreur.
    C'était juste pour être sur que l'on parle des widget.view et non des apps widget
    http://developer.android.com/guide/t...ets/index.html

    et y as surement un peu de fatigue aussi

    Tu veux faire une view qui affiche un layout écrit en xml ? ou ta view et le layout sont affichés à deux endroits?

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Tu veux faire une view qui affiche un layout écrit en xml ? ou ta view et le layout sont affichés à deux endroits?
    Concrètement j'ai une activité qui à un layout en XML. Ce layout contient des widget, dont ma view personnalisée (voir l'exemple de code précédent).

    J'aimerais depuis la classe qui gère ma view personnalisé pouvoir agir sur les autres éléments de l'activity.

    J'ai essayé ceci dans ma class Timeline (celle qui gère la view perso) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    View parent = (View) this.getParent()
    RadioButton button = (RadioButton)parent.findViewById(R.id.un_element_de_mon_activity);
    Mais sans succès , parent.findViewById me retourne null , comme si il ne cherchais pas au bon endroit.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Pourquoi ne pas plutôt passer une liste de View à ta View personnalisé à partir de ton Activity ?

    Puis de là tu traites cette liste dans ta view personnalisé.

    Maintenant je ne suis pas sûr que cela soit la bonne solution de déporter les évènements dans une View qui ne les concerne pas !
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Pourquoi ne pas plutôt passer une liste de View à ta View personnalisé à partir de ton Activity ?
    Tu aurais quelques liens la dessus ? Ca me parle pas beaucoup ^^

    Maintenant je ne suis pas sûr que cela soit la bonne solution de déporter les évènements dans une View qui ne les concerne pas !
    Je suis d'accord mais je supporte pas cette façon de programmer sous android que l'on voit partout qui consiste à imbriquer des classes dans d'autres classes tout ça pour facilement avoir accès à un context ou une ressource particulière contenu dans la classe principale. Je trouve ça fouillis au possible.

    Sinon l'idée du getParent() est à oublier ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Tu aurais quelques liens la dessus ? Ca me parle pas beaucoup ^^
    Pour l'instant je l'avais dans la tête mais cela ressemblerais à cela:


    Code : 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
    ArrayList<View> listview = new ArrayList<View>();
     
     
    public void AddView(View view) {
        listview.add(view);
        Eventcontrol(view);
    }
     
    public void Eventcontrol(View view) {
         // overload you event ;) 
    }
     
    public onClick(View v) {
       // tu compares la view à ta liste pour savoir quelle view a été cliqué 
    }
     
     
    public onTouchEvent(MotionEvent event){
       // par contre là je ne sais pas encore comment on peut savoir quelle view est active ^^.
    }
    Et en fait à partir de ton activity, tu donnerais la possibilité à ta View personnalisé de contrôler les "Widget View" qu'elle souhaite se séparer.
    Par contre pour connaître quelle type de View est ce, tu peux toujours faire un cast dessus est voir s'il fonctionne, ou donnée un élèment supplémentaire à ta liste pour lui spécifier le type de View.

    Maintenant si tu veux centraliser tes évènements, est ce qu'il n'est pas plus préférable de les gérer en dehors de toute View , et juste dans un classe gérant que les évènements.

    Je suis d'accord mais je supporte pas cette façon de programmer sous android que l'on voit partout qui consiste à imbriquer des classes dans d'autres classes tout ça pour facilement avoir accès à un context ou une ressource particulière contenu dans la classe principale. Je trouve ça fouillis au possible.
    faut prendre l'habitude, mais cela a le mérite d'être dynamique.


    Sinon l'idée du getParent() est à oublier ?
    Ce qui me dérange avec cette idée , c'est que tu vas avoir quelque chose de statique dans ta view personnalisé qui ne fonctionnera qu'avec un type d'activité qui remplira des critères spécifié. (comme l'existence d'un id toto qui est un radiobutton).
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  9. #9
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Il me semble que le findchild ne fonction que sur l'objet qui inflaté à partir du xml (activity ou view créé par un inflat).

    Je ne comprend pas ce que tu veux faire.... Pourquoi ta view devrait connaitre le layout??? Ca fait spaghetti, non?

    Pourquoi ne pas mettre de listener sur ta view et tu laisse l'activity gérer le lien entre tes éléments graphique?

  10. #10
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Donc pour vous la solution la plus approprié serait de faire quelques chose comme cela :

    Code : 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
     
    class myactivity extends Activity
    {
    	//(...)
     
    	private class MySubCustomWidget extends MyCustomWidget
    	{
    		@Override
    		protected void onMyCustomEvent()
    		{
    			//Agir sur les autres widgets de l'activity
    		}
    	}
    }
     
    class abstract MyCustomWidget
    {
    	//(...)
    	private void actionSpeciale()
    	{
    		this.onMyCustomEvent();
    	}
     
    	protected abstract void onMyCustomEvent();
    }
    ?

    Je suis plutôt novice avec android (un peu moins en java) donc si l'idée est pas bonne hésitez pas ^^
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Je voulais dire comme un Buton à qui l'on peut fournir des listener (callback si tu veux). Tu couple avec les inner classe et cela me semble plus propre.

    Pour moi, une view doit pouvoir être utilisée sans connaitre ses alentours.

    Je n'ai pas d'éclipse ici, mais cela ressemble à cela (il faut surement corriger le code)
    Code : 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
    class maview extend android.widget.view
    {
    	public interface monListener
    	{
    		void monAction(...);
     
    	}
     
    	private monListener  ll = null;
     
    	void setMonListener(monListener l) { ll = l;}
     
     
    	void une fonction()
    	{
    	    ....
    		if(ll)
    		{
    		            ll.monAction(...);
    		}
     
    	}
    }
    Dans l'activity tu instancie des classes anonyme qui implémentent l'interface listener et feront le lien avec l’extérieur.

  12. #12
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Ok je comprend mieux.
    J'ai trouver un lien sur le sujet qui devrait faire mon bonheur. Si jamais ça peut servir à d'autre :

    http://tseng-blog.nge-web.net/blog/2...-android-java/
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Le but c'est rendre ta view personnalisée comme une boite noir avec des entrées et des sortie.
    Les sortie étant les listeners.

    Si tu doit fournir plusieurs listener, tu peut définir ll (de mon exemple) comme une list.

  14. #14
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Citation Envoyé par grunk Voir le message
    Ok je comprend mieux.
    J'ai trouver un lien sur le sujet qui devrait faire mon bonheur. Si jamais ça peut servir à d'autre :

    http://tseng-blog.nge-web.net/blog/2...-android-java/
    Je pense que c'est la bonne méthode à employer, gère les évènements dans les View appropriées , et tu pourras ainsi redéfinir leur action si tu le souhaites .

    Si tu doit fournir plusieurs listener, tu peut définir ll (de mon exemple) comme une list.
    Cela reprends mon exemple avec l'idée des listener , ou observer si tu le souhaites également.
    Mais j'insiste sur le fait que je suis d'accord avec yan cela doit être traiter dans l'activity qui doit faire le lien (en redéfinissant la fonction si tu le souhaites) et non dans une View qui centralises toutes les View disponible dans le layout.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  15. #15
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    En fait ça me dérangeait de le faire dans la view si j'avais eu à dériver ma vue personalisée comme montrer dans un de mes précedents post.

    Mais cette solution avec un listenerr personalisé me convient parfaitement.

    Merci de votre aide.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/10/2015, 17h16
  2. Démarrer une activité depuis une AsyncTask
    Par DummyDev dans le forum Android
    Réponses: 6
    Dernier message: 10/01/2013, 18h10
  3. Actualisation d'une activité depuis une autre
    Par eento dans le forum Android
    Réponses: 2
    Dernier message: 08/08/2012, 01h51
  4. Réponses: 2
    Dernier message: 17/04/2007, 17h14
  5. [MFC]agir sur un control depuis une dll
    Par giova_fr dans le forum MFC
    Réponses: 3
    Dernier message: 01/02/2006, 23h23

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