L'envoi de Plusieurs Intentions à partir d'une Seule Activité à une Autre Activité
Je suis très nouveau pour android, et je suis en train d'envoyer de l'utilisateur-saisie de données (leurs noms) à une autre activité. Dans le passé j'ai été en mesure d'envoyer des lignes simples entre les activités utilisant les Intentions, mais je n'ai pas été en mesure de déterminer comment envoyer des deux chaînes à deux TextViews.
Voici mon code pour le MainActivity jusqu'à présent:
package com.example.game;
import android.content.Intent;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.Button;
import android.widget.EditText;
import android.view.View;
import android.widget.AutoCompleteTextView;
public class MainActivity extends Activity {
public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
sendNames();
sendNames2();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void sendNames() {
//sends player1's name to mainGame
Intent intent = new Intent (this, MainGame.class);
EditText player1 = (EditText) findViewById(R.id.player1);
String message = player1.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
}//sends player2's name to mainGame
public void sendNames2(){
Intent intent2 = new Intent(this, MainGame.class);
EditText player2 = (EditText) findViewById(R.id.player2);
String message2 = player2.getText().toString();
intent2.putExtra(EXTRA_MESSAGE, message2);
startActivity(intent2);
}
}
Code pour mon deuxième activité, MainGame:
package com.example.game;
import android.content.Intent;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.annotation.SuppressLint;
import android.view.MenuItem;
import android.support.v4.app.NavUtils;
import android.annotation.TargetApi;
import android.os.Build;
import android.widget.TextView;
public class MainGame extends Activity {
@SuppressLint("NewAPI")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
//retrives player1's name
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
TextView name1 = (TextView) findViewById(R.id.name1);
name1.setText(message);
//retrivews player2's name
Intent intent2 = getIntent();
String message2 = intent2.getStringExtra(MainActivity.EXTRA_MESSAGE);
TextView name2 = (TextView) findViewById(R.id.name2);
name2.setText(message2);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
getActionBar().setDisplayHomeAsUpEnabled(true);
}
}
return super.onOptionsItemSelected(item);
}
}
Lorsque je l'exécute, je reçois tout ce qui a été mis en place pour 'nom2' dans les deux TextViews. Que dois-je faire pour changer cela?
- Pourquoi ne pas vous recueillir et de transmettre un paquet à la nouvelle activité?
Vous devez vous connecter pour publier un commentaire.
C'est parce que vous êtes la création d'une nouvelle instance de la
Activity
avec la deuxièmeIntent
. Il y a différentes façons de le faire. L'une serait de créer un seulIntent
comme une variable membre, l'instancier dans votre premier appel de la fonction, ajouter des extras, puis ajouter les autres dans la seconde méthode, et d'appelerstartActivity
là.Mais il serait probablement plus facile et plus lisible de faire tout cela en même temps.
Et il suffit d'appeler cette méthode.
Puis l'obtenir avec
Une Intention, c'est comme une Carte où vous pouvez stocker la Chaîne (et d'autres objets sérialisables) avec une clé. Dans votre code, vous utilisez la même clé
EXTRA_MESSAGE
deux fois.Aussi, gardez à l'esprit que vous utilisez une Intention de démarrer une Activité: vous NE pouvez pas avoir 2 de l'Intention de départ, un seul exemple d'une Activité. La solution est de mettre les 2 valeurs avec 2 clés distinctes dans une seule Intention.
Vous pouvez envoyer plusieurs paramètres à une activité à l'aide de l'intention, Vous n'avez pas à créer deux différents intention de le faire.
Vous pouvez procéder comme suit
puis obtenir ces valeurs comme