Bonjour à toutes et à tous,
Je reviens pour une nouvelle question, toujours dans l'idée d'avancer sur Android et merci à vous tous pour vos conseils.
Donc une question qui vous semblera simple je pense.
Imaginons une application avec 2 activités (MainActivity et secondActivity).
MainActivity ne fait qu'afficher "Hello" et dans le manifest, MainActivity est déclarée comme action MAIN et category LAUNCHER.
C'est donc MainActivity qui sera lancé en premier dans l'application et au lancement de celle-ci, il y aura donc affiché "Hello"
J'y ajoute un Intent et un bouton me permettant d'aller sur la second activité (secondActivity), affiché en dessous de ma String "Hello"
Voici le code de MainActivity:
Enfin, une second activité qui doit afficher la String de MainActivity donc le code suivant:
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 public class MainActivity extends AppCompatActivity { String myString = "Hello"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final TextView myStringToDisplay = (TextView) findViewById(R.id.tv_myStringHello); myStringToDiplay.setText(myString); final Button btn_go_page_2 = (Button) findViewById(R.id.btn_go_page_2); final Intent intent = new Intent(this, MainActivity2.class); btn_go_page_2.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { startActivity(intent); } }); } }
Ma question est la suivante, pourquoi n'ai-je pas accès aux variables de MainActivity puisque celle-ci se lance automatiquement au démarrage de l'application?
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 public class MainActivity2 extends AppCompatActivity { private myString2 = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_2); final TextView myStringToDisplay2 = (TextView) findViewById(R.id.tv_myStringHe); // myString2 en dessous ne fonctionne pas car MainActivity.myString n'est pas static. // il faudrait que j'ai une instance de MainActivity pour avoir accès à myString dans MainActivity. myString2 = MainActivity.myString; myStringToDisplay2.setText(String.valueOf(myString2)); final Button btn_go_home = (Button) findViewById(R.id.btn_go_home); final Intent intent = new Intent(this, MainActivity.class); btn_go_home.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { startActivity(intent); } }); } }
Je sais que je pourrais dans MainActivity2 ajouter une variable avec une instance de MainActivity dans MainActivity2 et ça marche, j'ai essayé mais ça ne me semble pas propre du tout, j'ai l'impression que j'aurais 2 fois MainActivity (à moins que ce soit une deuxième référence à la classe?), voici mon deuxième code de MainActivity2:
Comment cible-t-on MainActivity sans l'instancier dans une autre classe pour y avoir accès puisque cette activité est lancée au démarrage, c'est ça qui m'échappe?
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 public class MainActivity2 extends AppCompatActivity { private myString2 = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_2); // Je n'aime pas trop faire ça... Puisque MainActivity se lance tout seul au démarrage de l'application final MainActivity firstActivity = new MainActivity(); final TextView myStringToDisplay2 = (TextView) findViewById(R.id.tv_myStringHe); // Là, j'ai une instance de MainActivity donc j'ai accès à myString sans avoir à passer myString en static. myString2 = firstActivity.myString; myStringToDisplay2.setText(String.valueOf(myString2)); final Button btn_go_home = (Button) findViewById(R.id.btn_go_home); final Intent intent = new Intent(this, MainActivity.class); btn_go_home.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { startActivity(intent); } }); } }
Il y a bien une instance quelque part de MainActivity puisque la premère page affiche bien "Hello" et le bouton?
Merci à vous tous et un excellent weekend,
Eric.
Partager