2013-07-11 1 views
7

Ho un'attività che mostra una griglia di elementi. quando clicco su una di esse, passo a un'altra attività che mostra le informazioni dell'elemento. Ho anche la possibilità di tornare indietro (attività di gridview) o cancellarlo.come inviare valore attraverso l'intento dopo aver terminato un'attività

Se lo elimino, ho bisogno di aggiornare il gridview, quindi ho bisogno di inviare una variabile dicendo "eey, ho eliminato un elemento. È necessario aggiornare".

Credo di aver bisogno di aprire la seconda attività con startActivityForResult, ma non so come dovrei impostare il valore.

opzione 1 (freccia indietro): termina l'attività. nessun risultato indietro. opzione 2 (elimina elemento): termina l'attività e imposta un risultato indietro.

Grazie in anticipo!

+0

utilizzare 'startActivityForResult (intent, requestCode)'; –

+0

controlla questo http://stackoverflow.com/a/10407371/1911784 – OMAK

risposta

13

È possibile impostare il risultato personalizzato. Come DELETE_ITEM.

Sul pulsante Elimina fare qualcosa di simile:

public static int DELETE_ITEM = 1234; 

Intent intent = new Intent(); 
intent.putExtra("ITEM_ID", YOUR ITEM ID); 
setResult(DELETE_ITEM , intent); 

Ora sul risultato dell'attività fare qualcosa di simile:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if (resultCode == DELETE_ITEM) { 
    // CODE TO DELETE ITEM 
    super.onActivityResult(requestCode, resultCode, intent); 
    } 
} 
4

sì, è necessario utilizzare startActivityForResult. Prima di chiamare finitura sull'attività che mostra le informazioni della voce, devi chiamare

setResult(resultCode, data); 
finish(); 

in attività di GridView verrà invocato

protected void onActivityResult(int arg0, int resultCode, Intent data) 
8

Spero che questo aiuti

Prima classe

Intent i = new Intent(this, Second.class); 
startActivityForResult(i, 1); 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == 1) { 

     if (resultCode == RESULT_OK) { 
      String result = data.getStringExtra("result"); 
          //your code 

     } 
     if (resultCode == RESULT_CANCELED) { 
      // Write your code if there's no result 
     } 
    } 
} 

Seconda classe

Intent returnIntent = new Intent(); 
returnIntent.putExtra("result", "your message"); 
setResult(RESULT_OK, returnIntent); 
finish(); 
0

È necessario solo dopo aver eliminato la chiamata di immagine setResult con il codice del risultato appropriato e forse i dati.

Penso che il modo più corretto per ottenere questo è di tornare dal risultato utente personalizzato di attività di visualizzazione immagini. Può essere raggiunto se si scrive qualcosa di simile nell'attività del visualizzatore di immagini.

public static final int RESULT_IMAGE_DELETED = RESULT_FIRST_USER; 
public static final int RESULT_EXTRA_IMAGE_ID = "extra.imageid"; 

void onImageDeleted(int imageId) { 
    Bundle resultData = new Bundle(); 
    resultData.putInt(RESULT_EXTRA_IMAGE_ID, imageId); 

    setResult(RESULT_IMAGE_DELETED); 
    finish(); 
} 

Si potrebbe essere necessario impostare risultato di default nel metodo onCreate

@Override 
public void onCreate(Bundle savedInstanceState) { 
    // init stuff 
    setResult(RESULT_OK); 
} 

sulla vostra attività di rete è necessario per controllare il codice risultato della vostra immagine attività di spettatore, e se non è ok - fare controlla la tua rete ai suoi dati modificati.

public static final int REQUEST_VIEW_IMAGE = 1; 

void startImageViewing(int imageId) { 
    Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.putExtra(ImageViewActivity.EXTRA_IMAGE_ID); 
    startActivityForResult(intent, REQUEST_VIEW_IMAGE); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Bundle data) { 
    if (requestCode == REQUEST_VIEW_IMAGE) { 
     if (resultCode != RESULT_OK) { 
      updateImageGridView(); 
     } 
    } 
} 
0

possiamo iniziare il nuovo valore activity.Send attraverso l'intento di utilizzare questo ..

Intent principali = new Intent (MainActivity.this, SecondActivity.class); main.putExtra ("JobId", jobid); startActivityForResult (audio, requestCode);

ricevere il valore in SecondActivity come questo ..

int jobid = getIntent() getExtras() getInt ("jobId")..;

0

dire che io desidero andare da attività A all'attività B e passare un valore a B, e infine finire A.

Seguire questo:

qualche parte in una:

Intent goToActivityBIntent = new Intent(A.this, B.class); 
goToActivityBIntent.putExtra("com.example.myapp.data", data); 
      startActivity(goToActivityBIntent); 
      finish(); // close A 

ricevere i dati in B:

protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_b); 

     // receive the data 
     Bundle extras = getIntent().getExtras(); 
     if (extras != null) { 
      data = extras.getString("com.example.myapp.data"); 
     } 
// Some stuff 

    } 
0

Non c'è bisogno di terminare l'attività

//reload the adapter and use grid.invalidateViews(); Method 
adapter = new AppAdapter(MyApp.this, MyApp.this, data, show_collection); 
grid.invalidateViews(); 
grid.setAdapter(adapter); 

GridView ha un metodo invalidateViews() .

quando si chiama questo metodo: "tutte le viste da ricostruire e ridisegnare".

0

Beh, ho fatto in questo modo:

Inizio ActivityB da AcivityA da startSubActivity:

Intent intent = new Intent(AcivityA.this, ActivityB.class); 
startActivityForResult(intent, 19); 

In ActivityB uso setResult per inviare dati a AcivityA:

@Override 
public void finish() { 
    Intent intent = new Intent(); 
    intent.putExtra("flag",true); 
    setResult(RESULT_OK, intent); 
    super.finish(); 
} 

In ActivityAricevere i dati che sono stati inviati da ActivityB come onActivityResult:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == 19) { 
     if(resultCode == RESULT_OK) { 
      boolean flagResult = data.getBooleanExtra("flag"); 
      Log.i("Result", ""+flagResult); 
     } 
    } 
} 

Spero che questo vi aiuterà.