web-dev-qa-db-fra.com

Comment passer des données de la 2ème activité à la 1ère activité quand on les presse en arrière? - Android

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?

142
kumareloaded

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.

260
ρяσѕρєя K

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);
        }
    }
}
18
Swayam

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;
        }
    }
}
13
FindOut_Quran

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");
} 
4
katmanco

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
        }
    }
}
2
Manoj Reddy

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 ... :)

2
vishesh chandra

Lire ces:

  1. Retourne le résultat sur onActivityResult ()
  2. Récupération du résultat d'une activité appelée - Tutoriel Android pour les débutants

Ces articles vous aideront à comprendre comment transférer des données entre deux activités dans Android.

2
Dixit Patel

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;

0
Arash Afshar

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.

0
Franci Penov