2017-07-17 4 views
-4

Je fais une application Android qui a 2 activités. Dans cette application, l'activité numéro 1 va commencer l'activité numéro 2 et demander des données à partir de l'activité numéro 2. J'utilise l'intention de transférer des données entre eux. Comme je le sais, l'activité 2 n'envoie des données qu'après l'appel de la fonction finish(). Mais dans mon application, je veux garder l'activité 2 toujours active. Donc, est-il possible d'envoyer des données en utilisant l'intention sans attendre la fonction finish()?Comment envoyer des données par intention sans utiliser la fonction finish()?

MISE À JOUR: Voici mon code source:

  • en nombre Activité 1:

Numéro d'activité ouvert lorsque le bouton est pressé

public static final int REQUEST_CODE_INPUT=10; 
    public static final int RESULT_CODE_1=20; 
    public static final int RESULT_CODE_2=21; 
    private String TAG = "FirstActivity"; 


    btnInputData.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      //Open Activity number 2 With REQUEST_CODE_INPUT 
      Intent intent=new Intent(FirstActivity.this, SecondActivity.class); 
      //Call startActivityForResul 
      startActivityForResult(intent, REQUEST_CODE_INPUT); 
     } 
    }); 

processus a reçu des données

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 
    //Show Log 
    Log.d(TAG,"onActivityResult: requestCode = "+ requestCode+ "; resultCode = "+ resultCode); 
    //check if requestCode =REQUEST_CODE_INPUT 
    // 
    if(requestCode==REQUEST_CODE_INPUT) 
    { 
     //Check ResultCode from Activity 2 
     switch(resultCode) 
     { 
     case RESULT_CODE_1: 
      //value from Activity number 2 
      int v1= data.getIntExtra("data", 0); 
      arrData.add(v1*v1); 

      break; 
     case RESULT_CODE_2: 
      //value from Activity number 2 
      int v2= data.getIntExtra("data", 0); 
      arrData.add(v2); 
      break; 
     } 
    } 
} 

* Dans le numéro d'activité 2

fonction d'appel envoi de données lorsque le bouton est pressé

btnSave1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // 
      sendToFirstActivity(FirstActivity.RESULT_CODE_1); 
     } 
    }); 

    btnSave2.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // 
      sendToFirstActivity(FirstActivity.RESULT_CODE_2); 
     } 
    }); 

Fonction pour renvoyer des données au numéro d'activité 1

public void sendToFirstActivity(int resultcode) 
{ 
    Intent intent=getIntent(); 
    int value= Integer.parseInt(editNumber.getText()+""); 
    intent.putExtra("data", value); 
    setResult(resultcode, intent); 
    finish(); 
} 

Dans ce code, après le bouton de presse l'activité le numéro 2 fermera et enverra des données à l'activité numéro 1. Quand j'essaye de retirer la fonction finish(), l'activité 2 ne se fermera pas mais n'enverra pas de données à l'activité numéro 1.

+0

mettez votre code ici –

+0

Veuillez poster votre code pour empiler –

+0

Terminer() est nécessaire pour fermer l'activité en cours. Cela n'a rien à voir avec le transfert de données entre les activités. Utilisez la méthode putExtra() pour transférer les données. Lorsque startActivty() est déclenché, il envoie les données à une autre activité. Terminer n'a rien à faire. Il ferme juste l'activité après que votre prochaine activité se déclenche. –

Répondre

0

See the API de la fonction onActivityResult(), il sera déclenché uniquement lorsque vous appelez la fonction finish(). Je ne pense pas startActivityForResult() est la bonne méthode pour vous.

+0

pas révoquer, c'est invoquer, haha ​​ – manza

+0

Avez-vous une idée pour cela? –

+0

non, finish() est nécessaire – manza