J'ai 2 activités, Activity1 et Activity2.
Dans Activity1
, j'ai Button et TextView . Lorsque le bouton est cliqué, Activity2 est démarré.
Dans Activity2
j'ai un EditText.
Je souhaite afficher les données extraites de EditText dans Activity2 dans TextView dans Activity1 lorsque vous appuyez de nouveau sur Activity2.
quelqu'un peut-il m'aider avec le code pour que cela fonctionne?
Démarrez Activity2 avec startActivityForResult
et utilisez la méthode setResult
pour renvoyer les données de Activity2 à Activity1. Dans Activity1, vous devrez remplacer onActivityResult
pour mettre à jour TextView
avec les données EditText
de Activity2.
Par exemple:
Dans Activity1, démarrez Activity2 en tant que:
Intent i = new Intent(this, Activity2.class);
startActivityForResult(i, 1);
Dans Activity2, utilisez setResult
pour renvoyer des données:
Intent intent = new Intent();
intent.putExtra("editTextValue", "value_here")
setResult(RESULT_OK, intent);
finish();
Et dans Activity1, recevez des données avec onActivityResult
:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if(resultCode == RESULT_OK) {
String strEditText = data.getStringExtra("editTextValue");
}
}
}
Si vous le pouvez, utilisez également SharedPreferences pour partager des données entre les activités.
Activité1 devrait commencer Activité2 avec startActivityForResult()
.
Activity2 devrait utiliser setResult()
pour renvoyer des données à Activity1 .
Dans Activité2 ,
@Override
public void onBackPressed() {
String data = mEditText.getText();
Intent intent = new Intent();
intent.putExtra("MyData", data);
setResult(resultcode, intent);
}
Dans Activité1 ,
onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == RESULT_OK) {
String myStr=data.getStringExtra("MyData");
mTextView.setText(myStr);
}
}
}
Les autres réponses ne fonctionnaient pas lorsque j'ai mis setResult
dans onBackPressed
. Commenter un appel à super onBackPressed
et un appel finish
résolvent manuellement le problème:
@Override
public void onBackPressed() {
//super.onBackPressed();
Intent i = new Intent();
i.putExtra(EXTRA_NON_DOWNLOADED_PAGES, notDownloaded);
setResult(RESULT_OK, i);
finish();
}
Et en première activité:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == QUEUE_MSG) {
if (resultCode == RESULT_OK) {
Serializable tmp = data.getSerializableExtra(MainActivity.EXTRA_NON_DOWNLOADED_PAGES);
if (tmp != null)
serializable = tmp;
}
}
}
Prenez cette option comme alternative à startActivityforResult.Mais gardez à l'esprit que, dans de tels cas, cette approche peut être coûteuse en termes de performances, mais dans certains cas, vous devrez peut-être l'utiliser.
Dans l'activité2,
@Override
public void onBackPressed() {
String data = mEditText.getText();
SharedPreferences sp = getSharedPreferences("LoginInfos", 0);
Editor editor = sp.edit();
editor.putString("email",data);
editor.commit();
}
Dans l'activité1,
@Override
public void onResume() {
SharedPreferences sp = getSharedPreferences("LoginInfos", 0);
String dataFromOtherAct= sp.getString("email", "no email");
}
Depuis votre FirstActivity, appelez SecondActivity en utilisant la méthode startActivityForResult ().
Par exemple:
Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1);
Dans votre SecondActivity, définissez les données que vous souhaitez retourner à FirstActivity. Si vous ne voulez pas revenir, n'en définissez pas.
Par exemple: Dans secondActivity si vous souhaitez renvoyer des données:
Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);
finish();
Si vous ne voulez pas renvoyer de données:
Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();
Maintenant, dans votre classe FirstActivity, écrivez le code suivant pour la méthode onActivityResult ().
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == Activity.RESULT_OK){
String result=data.getStringExtra("result");
}
if (resultCode == Activity.RESULT_CANCELED) {
//Write your code if there's no result
}
}
}
c'est votre première activité1.
public class Activity1 extends Activity{
private int mRequestCode = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(this, Activity2.class);
startActivityForResult(intent, mRequestCode);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == mRequestCode && resultCode == RESULT_OK){
String editTextString = data.getStringExtra("editText");
}
}
}
À partir de là, vous commencez votre Activity2.class en utilisant startActivityForResult (mRequestCode, Activity2.class);
Maintenant c'est votre deuxième activité, le nom est Activity2
public class Activity2 extends Activity {
private EditText mEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//mEditText = (EditText)findViewById(R.id.edit_text);
Intent intent = new Intent();
intent.putExtra("editText", mEditText.getText().toString());
setResult(RESULT_OK, intent);
}
}
Maintenant, lorsque vous avez terminé avec votre deuxième activité, vous appelez la méthode setResult (), depuis onBackPress () ou à partir d’un clic de bouton lorsque votre Activity2 détruit, puis la méthode de rappel de votre Activity1 onActivityResult () appellera à partir de là, vous pourrez obtenir vos données d'intention ..
J'espère que cela vous aidera ... :)
Lire ces:
Ces articles vous aideront à comprendre comment transférer des données entre deux activités dans Android.
et j’ai un problème pour lequel je voulais envoyer ce type de données à un bouton programmable que j’avais fabriqué et à la touche programmable qui est la valeur par défaut de chaque appareil Android. C’est ce que j’ai fait. Je m’ai d'abord créé un Intent
dans mon "A" Activity
:
Intent intent = new Intent();
intent.setClass(context, _AddNewEmployee.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivityForResult(intent, 6969);
setResult(60);
Puis dans ma deuxième activité, j'ai déclaré un champ dans mon "B" Activity
:
private static int resultCode = 40;
puis, après avoir fait ma demande avec succès ou chaque fois que je voulais dire à l'activité "A" que ce travail a été effectué avec succès ici, changez la valeur de resultCode pour qu'elle soit identique à celle que j'ai indiquée dans "A" Activity
qui, dans mon cas, est "60" et alors:
private void backToSearchActivityAndRequest() {
Intent data = new Intent();
data.putExtra("PhoneNumber", employeePhoneNumber);
setResult(resultCode, data);
finish();
}
@Override
public void onBackPressed() {
backToSearchActivityAndRequest();
}
PS: n'oubliez pas de supprimer Super
de la méthode onBackPressed si vous voulez que cela fonctionne correctement.
alors je devrais aussi appeler la méthode onActivityResult
dans mon activité "A":
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 6969 && resultCode == 60) {
if (data != null) {
user_mobile = data.getStringExtra("PhoneNumber");
numberTextField.setText(user_mobile);
getEmployeeByNumber();
}
}
}
ça y est, espérons que cela vous aide. #HappyCoding;
TL; DR Utilisation Activity.startActivityForResult
Longue réponse:
Vous devriez commencer par lire la documentation destinée aux développeurs Android. Plus précisément, le sujet de votre question est traité dans la section Starting Activities and Getting Results
de la documentation Activity
.
Comme par exemple le code, le SDK Android fournit de bons exemples. En outre, d’autres réponses ici vous donnent des extraits de code à utiliser.
Cependant, si vous recherchez des alternatives, lisez cette SO question . Ceci est une bonne discussion sur la façon d'utiliser startActivityForResults
avec des fragments, ainsi que quelques approches pour la transmission de données entre activités.