E 'una buona pratica per ricaricare una Activity
in Android ?
Quale sarebbe il modo migliore per farlo? this.finish
e poi this.startActivity
con l'attività Intent
?
E 'una buona pratica per ricaricare una Activity
in Android ?
Quale sarebbe il modo migliore per farlo? this.finish
e poi this.startActivity
con l'attività Intent
?
Risposte:
Puoi semplicemente usare
finish();
startActivity(getIntent());
per rinfrescare un Activity
dentro di sé.
per coloro che non vogliono vedere quel battito di ciglia dopo il metodo ricreate () usano semplicemente
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);
Questo è ciò che faccio per ricaricare l'attività dopo aver cambiato il ritorno da un cambiamento di preferenza.
@Override
protected void onResume() {
super.onResume();
this.onCreate(null);
}
Questo essenzialmente fa sì che l'attività si ridisegni.
Aggiornato: un modo migliore per farlo è chiamare il recreate()
metodo. Ciò causerà la ricreazione dell'attività.
Ho visto le risposte precedenti che sono state fornite per ricaricare l'attività usando Intent. Funzioneranno, ma puoi anche fare lo stesso usando il metodoreatte () indicato nella stessa classe Activity.
Invece di scrivere questo
// Aggiorna l'attività principale alla chiusura della finestra di dialogo
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();
Questo può essere fatto solo scrivendo questo
recreate();
recreate()
è stata la soluzione per me - "riavviare" l'attività non ha funzionato per me, poiché ho iniziato l'attività usando "StartActivityForResult" e ha rotto il comportamento.
semplicemente usa
this.recreate();
questo attiverà il metodo onCreate nell'attività
Avevo bisogno di aggiornare un elenco di messaggi in una delle mie applicazioni in fretta, quindi ho appena eseguito un aggiornamento della mia attività principale dell'interfaccia utente prima di chiudere la finestra di dialogo in cui mi trovavo. Sono sicuro che ci sono anche modi migliori per farlo.
// Refresh main activity upon close of dialog box
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish(); //
Android include un sistema di gestione dei processi che gestisce la creazione e la distruzione di attività che nega in gran parte qualsiasi vantaggio che potresti vedere dal riavvio manuale di un'attività. Puoi vedere maggiori informazioni a riguardo in Application Fundamentals
Ciò che è buona pratica è assicurarsi che i metodi onPause e onStop rilascino tutte le risorse che non è necessario conservare e utilizzare onLowMemory per ridurre al minimo le esigenze delle attività.
in alcuni casi è la migliore pratica in altri non è una buona idea è guidata dal contesto se hai scelto di farlo usando il seguente è il modo migliore per passare da un'attività ai suoi figli:
Intent i = new Intent(myCurrentActivityName.this,activityIWishToRun.class);
startActivityForResult(i, GlobalDataStore.STATIC_INTEGER_VALUE);
il fatto è ogni volta che finisci () da activityIWishToRun che ritorni alla tua attività vivente
Ricaricare l'intera attività può essere un compito pesante. Basta inserire la parte di codice che deve essere aggiornata in ( kotlin ):
override fun onResume() {
super.onResume()
//here...
}
Giava:
@Override
public void onResume(){
super.onResume();
//here...
}
E chiama " onResume () " ogni volta che è necessario.
Non credo sia una buona idea ... sarebbe meglio implementare un metodo più pulito. Ad esempio, se l'attività contiene un modulo, il metodo più pulito potrebbe semplicemente cancellare ogni widget nel modulo ed eliminare tutti i dati temporanei. Immagino sia quello che vuoi: ripristinare l'attività al suo stato iniziale.
Dopo aver provato questo per un po 'non ho trovato conseguenze inattese nel riavvio di un'attività. Inoltre, credo che questo sia molto simile a quello che fa Android per impostazione predefinita quando cambia l'orientamento, quindi non vedo un motivo per non farlo in una circostanza simile.
ho lo stesso problema
import android.support.v4.content.IntentCompat;
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
questo codice funziona per me. API Android 17
In un'attività puoi chiamare recreate()
per "ricreare" l'attività (API 11+)
Ho avuto un altro approccio come: impostare la launchMode
mia attività su singleTop
e senza chiamare finish()
, startActivity(getIntent())
farà solo il lavoro. Devo solo preoccuparmi dei nuovi dati sia in onCreate()
che onNewIntent
. A proposito di Sush, l'applicazione potrebbe lampeggiare come diceva AMAN SINGH. Ma l'approccio di AMAN SINGH creerà comunque una nuova attività che è in qualche modo, non necessaria, anche se ha risolto il problema del "battito di ciglia", credo.
Troppo tardi per questa domanda, ma se qualcuno cerca una soluzione, eccola qui.
Dopo il login ho avuto lo stesso problema, quindi l'ho usato
@Override
protected void onRestart() {
this.recreate();
super.onRestart();
}
l'ho usato e funziona bene senza
finish()
startActivity(getIntent());
per me sta funzionando non sta creando altri Intenti e sullo stesso i nuovi dati Intenti caricati.
overridePendingTransition(0, 0);
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);