Domanda

Ho una domanda relativa all'avvio di nuove attività. Si riduce a questo. Ho 3 schede in una vista

A) contains gMap activity
 B) camera activity
 C) some random text fields.

Requisito è che l'applicazione venga eseguita in modalità Ritratto.

Tutte e 3 le schede funzionano come previsto con l'eccezione della superficie di anteprima della fotocamera (B). È ruotato di 90 gradi. L'unico modo per renderlo corretto è impostare l'app su landscape che getta tutte le mie schede in giro ed è praticamente impraticabile.

La mia soluzione è questa: sostituisci

l'attività della mia macchina fotografica con un'attività normale vuota con l'eccezione di

Intent i = new Intent(this,CameraActivity.class);
    startActivity(i);

Questo avvia my CameraActivity. E funziona benissimo. Ho dovuto fare un layout lineare e includere 3 immagini che assomigliano a schede reali, quindi posso provare a imitare il funzionamento delle schede ruotando lo schermo in orizzontale e mantenendo le immagini come ritratto. L'utente può fare clic su una delle immagini (pulsanti) per visualizzare la scheda successiva. Questo è il mio problema Dovrebbe uscire dalla mia 'attività della fotocamera' tornando alla 'attività vuota' in una scheda, dove dovrebbe essere interpretato per fare clic sulla scheda desiderata dalla mia immagine.

La cosa principale è, quando ritorna, ritorna a una pagina vuota (nera) sotto una scheda (perché è "vuota"). Come posso catturare l'evento di ritorno nella pagina che ha chiamato l'attività e quindi vedere quale azione hanno eseguito?

Posso impostare un listener onclick in cui posso rispondere alle schede false (immagini) su cui si fa clic per uscire dall'attività della fotocamera. All'uscita, la scheda dovrebbe aggiornarsi in modo che sia dove torni. qualche suggerimento?

Grazie,

È stato utile?

Soluzione

Mi concentrerò sulla risposta a come risolvere il tuo ambiente di lavoro in modo che si comporti come desideri.

Per acquisire azioni eseguite su un'attività all'interno di un'altra, sono necessari tre passaggi.

Avvia l'attività secondaria (la tua "attività della fotocamera") come attività secondaria utilizzando startActivityForResult anziché startActivity .

Intent i = new Intent(this,CameraActivity.class);    
startActivityForResult(i, STATIC_INTEGER_VALUE);

All'interno della sottoattività (Attività della fotocamera), anziché limitarsi a chiudere l'attività quando un utente fa clic sull'immagine della scheda diversa, è necessario creare un nuovo intento e includere l'indice della scheda da visualizzare quando si torna all'app padre usando il pacchetto extra. Per passarlo alla chiamata principale setResult prima di chiamare finish per chiudere l'attività della videocamera.

resultIntent = new Intent(null);
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, tabIndexValue);
setResult(Activity.RESULT_OK, resultIntent);
finish();

Il passaggio finale è nell'Attività chiamante, sovrascrive onActivityResult per ascoltare i callback dall'attività della videocamera. Ottieni il supplemento dall'intento restituito per determinare l'indice della scheda che dovresti visualizzare.

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) {     
  super.onActivityResult(requestCode, resultCode, data); 
  switch(requestCode) { 
    case (STATIC_INTEGER_VALUE) : { 
      if (resultCode == Activity.RESULT_OK) { 
      int tabIndex = data.getIntExtra(PUBLIC_STATIC_STRING_IDENTIFIER);
      // TODO Switch tabs using the index.
      } 
      break; 
    } 
  } 
} 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top