ClémentHallet Posté(e) 24 février 2011 Share Posté(e) 24 février 2011 Bonjour les gars (et les filles évidemment :D ) Voilà, j'ai un Listener dans ma classe main. Celui ci se déclenche lors d'un slice de doigt. Il faudrait que je lance une methode d'une seconde classe, mais je ne sais pas comment faire. J'arrive a lancer quelques methodes mais ca ne fonctionne pas correctement (faut tout mettre en static oO ) MAIN TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost); // Le TabHost a des Tabs TabSpec firstTabSpec = tabHost.newTabSpec("tid1"); // TabSpec: new tab - TabSpec : setContent to the tab TabSpec secondTabSpec = tabHost.newTabSpec("tid1"); TabSpec thirdTabSpec = tabHost.newTabSpec("tid1"); // tid1 is firstTabSpec Id (used to access outside) /** TabSpec setIndicator() indique le nom et les param -- TabSpec setContent() règle le contenu d'une tab */ firstTabSpec.setIndicator("Informations", getResources().getDrawable(R.drawable.database)).setContent(new Intent(this,FirstTab.class)); secondTabSpec.setIndicator("Graphiques", getResources().getDrawable(R.drawable.chart)).setContent(new Intent(this,SecondTab.class)); thirdTabSpec.setIndicator("Réglages", getResources().getDrawable(R.drawable.settings)).setContent(new Intent(this,ThirdTab.class)); /** Ajout des tabSpec sur le TabHost to display. */ tabHost.addTab(firstTabSpec); tabHost.addTab(secondTabSpec); tabHost.addTab(thirdTabSpec); ... if (prediction.name.equals(g)) {SecondTab.setGauche(); SecondTab.refresh();} if (prediction.name.equals(d)) {SecondTab.setDroite(); SecondTab.refresh(); } pour les methodes et les variables utilisées dans la methode SecondTab, je devrais utiliser de smethodes et variables static, limite OK, mais lors'que je dois afficher le graphique, ca ne vas pas: GraphView graphView = new GraphView(this, values,"Graphique du " + jour + " " + textMois(mois) + " " + an + " en " + unite, GraphView.BAR); setContentView(graphView); ...avec comme constructeur de la classe graphView: GraphView(Context context, float[] values, String title, boolean type) voilà tout, big thx à celui qui m'aide car je dois rendre le programme très vite :-) THXXXXXX Lien vers le commentaire Partager sur d’autres sites More sharing options...
ClémentHallet Posté(e) 3 mars 2011 Auteur Share Posté(e) 3 mars 2011 up, 4 jours de melasse... Merci à celui qui m'aide!! Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 3 mars 2011 Share Posté(e) 3 mars 2011 Et quel est ton soucis ? Peux-tu nous indiquer plus précisément quel est le problème ? ce que tu veux faire ? (parce que "ça ne va pas", cela n'apporte pas grand-chose à la compréhension de ton problème...) Lien vers le commentaire Partager sur d’autres sites More sharing options...
ClémentHallet Posté(e) 4 mars 2011 Auteur Share Posté(e) 4 mars 2011 J'avoue, y'a plus explicite :-) J'ai un programme avec 3 Tab's: contient des informations contenues dans un textView contient un graphique issu de : GraphView contient deux champs et deux boutons pour login:pass , enregistrer et tester le jeu de login&pass Les données et le graphe sont rapatriées via un webservice (qui est fonctionnel). Le graphe affiche des données journalières, mensuelles et annuelles (on séléctionne le type de graphe via l'appui sur le bouton "menu" du téléphone une fois sur l'écran de graphiques. Je voudrais implémenter le swipe de manière à pouvoir changer le jour (si on est sur le graphe journalier), changer le mois (si on est sur le graphe mensuel) ou changer l'année (...). L'architecture de mon programme est la suivante : Main (lance les onglets, listener des onglets) SecondTab : represente le contenu de ma seconde tab, fais les requetes http, et cree un objet GraphView GraphView : crée le graphe Vu que le graphique n'utilise pas les xml, j'ai mis le code de Gesture xml sur ma classe Main qui gère les onglets. Je détecte les gestures depuis la classe Main. J'ai mis des variables static pour le jour, le mois et l'année, je les ai mises dans la classe SecondTab et je les modifier depuis la Main, lors d'un swipe. Pour re-générer le graphe avec les nouvelles informations (la nouvelle date), je ne sais pas le faire par contre (je ne sais pas le mettre en static). Donc voici mon programme tel qu'il est, fonctionnel, mais sans le refresh. Est ce que quelqu'un est prêt à m'aider?? je lui serait très reconnaissant, je bosse dessus depuis 3 jours, mais je suis loin d'être un expert! Here's the project : e-mars_4mars.zip Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 4 mars 2011 Share Posté(e) 4 mars 2011 Il est préférable que tu fasses la gestion des gestures au niveau de ton second onglet, plutôt que dans la MainActivity. Même si tu comptes ajouter le GraphView dynamiquement dans cet onglet, tu peux quand même définir un layout minimal pour ton onglet, qui ne contiendrait que le GestureOverlayView. Ce GestureOverlayView étant un ViewGroup, tu peux très bien y ajouter par programmation des vues filles. Ainsi, au lieu d'ajouter ton GraphView directement à l'Activity de l'onglet via un setContentView, tu ajouteras ton GraphView en tant que vue fille du GestureOverlayView, via un addView sur ce GestureOverlayView Et ainsi, tu n'auras plus de problème pour accéder aux attributs/méthodes de ton onglet Lien vers le commentaire Partager sur d’autres sites More sharing options...
ClémentHallet Posté(e) 4 mars 2011 Auteur Share Posté(e) 4 mars 2011 Il est préférable que tu fasses la gestion des gestures au niveau de ton second onglet, plutôt que dans la MainActivity. Même si tu comptes ajouter le GraphView dynamiquement dans cet onglet, tu peux quand même définir un layout minimal pour ton onglet, qui ne contiendrait que le GestureOverlayView. Ce GestureOverlayView étant un ViewGroup, tu peux très bien y ajouter par programmation des vues filles. Ainsi, au lieu d'ajouter ton GraphView directement à l'Activity de l'onglet via un setContentView, tu ajouteras ton GraphView en tant que vue fille du GestureOverlayView, via un addView sur ce GestureOverlayView Et ainsi, tu n'auras plus de problème pour accéder aux attributs/méthodes de ton onglet Je te remercie énormément, tu fais avancer le shmil.. le shmill... le shmilblick ( Coluche - Le Shmilblick ). Bon, trève de plaisanterie : Voilà, je pense avoir implément tout le code nécessaire mais ca coince à "addView(graphview);" présent dans l'oncreate de SecondTab : The method addView(GraphView) is undefined for the type SecondTab... J'ai " public class SecondTab extends Activity implements OnGesturePerformedListener{ " comme déclaration de la classe, je ne dois pas mettre View quelque part? Sinon voici le code que j'ai mis (en synthétisé, je fais déjà asser ch... ainsi :| ) secondtab.xml : <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <android.gesture.GestureOverlayView android:id="@+id/gestures" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" android:eventsInterceptionEnabled="true" android:gestureStrokeType="single" /> </LinearLayout> Classe SecondTab: public class SecondTab extends Activity implements OnGesturePerformedListener{ ... public GraphView graphview; ... @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.secondtab); dispatch(); addView(graphview); ... (code du Listener ...) } public void dispatch() { ... graphview = new GraphView( ... ); } Alors que Class GraphView est bien une vue (GraphView extends View{... ) Au besoin, revoici le code, mais mis à jour : e-mars_4mars_15h.zip Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 4 mars 2011 Share Posté(e) 4 mars 2011 Le addView, il faut le faire sur le GestureOverlayView, pas sur l'Activity public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.secondtab); dispatch(); GestureOverlayView v = (GestureOverlayView)findViewById(R.id.gestures); v.addView(graphview, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); ... } (adapter les LayoutParams si tu préfères un WRAP_CONTENT par ex.) Lien vers le commentaire Partager sur d’autres sites More sharing options...
ClémentHallet Posté(e) 4 mars 2011 Auteur Share Posté(e) 4 mars 2011 Le addView, il faut le faire sur le GestureOverlayView, pas sur l'Activity (adapter les LayoutParams si tu préfères un WRAP_CONTENT par ex.) RE merci de ton aide, j'aurai eu énormément de mal de trouver seul. Je vérifie et j'adapte ce que tu m'a fourni :-) Lien vers le commentaire Partager sur d’autres sites More sharing options...
ClémentHallet Posté(e) 4 mars 2011 Auteur Share Posté(e) 4 mars 2011 Voilà, ca fonctionne :D :P :D j'ai remis les lignes GestureOverlayView v = (GestureOverlayView)findViewById(R.id.gestures); v.removeAllViews(); v.addView(graphview, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); dans mon Listener pour régénérer le graphe. Je ne sais pas si removeAllViews est la plus propre, mais elle fonctionne bel et bien ! Je ne sais comment te remercie, tu m'enlèves un sacré mal tu sais :D Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.