Aller au contenu

appel à des methodes d'un autre classe


ClémentHallet

Recommended Posts

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

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

J'avoue, y'a plus explicite :-)

J'ai un programme avec 3 Tab's:

  1. contient des informations contenues dans un textView
  2. contient un graphique issu de : GraphView
  3. 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

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

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

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

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

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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...