Come passare i valori da un'attività precedente attività
-
13-09-2019 - |
Domanda
Come faccio a passare un valore da uno schermo alla sua schermata precedente?
Consideriamo questo caso: ho due attività. Il primo schermo ha una TextView
e un pulsante e la seconda attività ha una EditText
e un pulsante.
Se si fa clic sul primo pulsante allora deve muoversi a seconda attività e qui utente deve digitare qualcosa nella casella di testo. Se si preme il pulsante dalla seconda schermata poi i valori della casella di testo dovrebbe spostarsi alla prima attività e che dovrebbero essere visualizzato nella prima TextView
attività.
Soluzione
Per catturare azioni eseguite su un'attività all'interno di un altro richiede tre passaggi.
avviare l'attività secondaria (il vostro 'Modifica testo' Attività) come un sottosettore utilizzando startActivityForResult
dalla vostra attività principale.
Intent i = new Intent(this,TextEntryActivity.class);
startActivityForResult(i, STATIC_INTEGER_VALUE);
All'interno della subattività, piuttosto che solo la chiusura della attività quando un utente fa clic sul pulsante, è necessario creare un nuovo Intent e include il valore di testo inserito nel suo pacchetto extra. Per passare di nuovo al setResult
chiamata genitore prima di chiamare finish
per chiudere l'attività secondaria.
Intent resultIntent = new Intent();
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, enteredTextValue);
setResult(Activity.RESULT_OK, resultIntent);
finish();
Il passo finale è nella vocazione di attività: Override onActivityResult
ascoltare per le richiamate dalla immissione di testo Activity. Prendi l'extra dal intenti tornato per ottenere il valore di testo che si dovrebbe 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) {
String newText = data.getStringExtra(PUBLIC_STATIC_STRING_IDENTIFIER);
// TODO Update your TextView.
}
break;
}
}
}
Altri suggerimenti
Ci sono due modi con cui si può accedere alle variabili o oggetti in altre classi o attività.
A. Database
B. preferenze condivise.
C. Serializzazione degli oggetti.
D. Una classe che può contenere dati comuni può essere nominato come Common Utilities dipende da voi.
E. Passando dati attraverso Intenti e Parcelable interfaccia.
E 'dipenderà dalla vostra esigenze di progetto.
A. database
SQLite è un database open source che è incorporato in Android. SQLite supporta le funzioni di database relazionali standard come sintassi SQL, le transazioni e le istruzioni preparate.
Tutorials - http://www.vogella.com/articles/AndroidSQLite/ article.html
B. Preferenze condivise
Si supponga di voler archiviare nome utente. Quindi ci saranno ora due cosa che un chiave Nome utente, Valore Valore.
Come conservare
// Create object of SharedPreferences.
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
//now get Editor
SharedPreferences.Editor editor = sharedPref.edit();
//put your value
editor.putString("userName", "stackoverlow");
//commits your edits
editor.commit();
Uso putString (), putBoolean (), putInt (), putFloat (), putLong () È possibile salvare le dtatype desiderato.
Come prendere
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
String userName = sharedPref.getString("userName", "Not Available");
http://developer.android.com/reference/android/content /SharedPreferences.html
C. serializzazione degli oggetti
serlization oggetto viene utilizzato, se vogliamo salvare uno stato oggetto di inviare sulla rete o si può utilizzare per il vostro scopo anche.
Utilizzare i fagioli java e conservare in esso come uno dei suoi campi e uso getter e setter per questo
JavaBeans sono classi Java che hanno proprietà. Pensa a proprietà come variabili di istanza private. Dato che sono private, l'unico modo essi possono essere accessibili dall'esterno della loro classe è attraverso metodi della classe. Il metodi che modificano il valore di una proprietà sono chiamati metodi setter, ei metodi che recuperano il valore di una proprietà sono chiamati metodi getter.
public class VariableStorage implements Serializable {
private String inString ;
public String getInString() {
return inString;
}
public void setInString(String inString) {
this.inString = inString;
}
}
Impostare la variabile a voi posta metodo utilizzando
VariableStorage variableStorage = new VariableStorage();
variableStorage.setInString(inString);
Quindi utilizzare oggetto Serialzation per serializzare l'oggetto e nel vostro altra classe deserializzare questo oggetto.
In serializzazione un oggetto può essere rappresentato come una sequenza di byte che include dati dell'oggetto così come informazioni sul tipo dell'oggetto e dei tipi di dati memorizzati nell'oggetto.
Dopo un oggetto serializzato è stato scritto in un file, si può leggere dal file e deserializzato cioè, le informazioni sul tipo e byte che rappresentano l'oggetto ed i suoi dati possono essere utilizzati per ricreare l'oggetto in memoria.
Se volete tutorial per questo riferimento questo link
http://javawithswaranga.blogspot.in/2011/08 /serialization-in-java.html
D. CommonUtilities
È possibile fare una classe per la vostra auto, che può contenere dati comune che avete spesso bisogno nel vostro progetto.
Esempio
public class CommonUtilities {
public static String className = "CommonUtilities";
}
E. Passaggio di dati attraverso Intenti
Si prega di fare riferimento questo tutorial per questa opzione di passare i dati.
non dovete ..
basta chiamare newIntenet () dalla seconda attività
Intent retData=new Intent();
Aggiungi dati da passare indietro
putExtras (retData.putExtra("userName", getUsrName()));
andare avanti con setResult
setResult(RESULT_OK, retData);
e possono poi finire
finish();
startSubActivity ()
Ed ecco un link dal SDK con ulteriori informazioni:
http://developer.android.com/guide/appendix /faq/commontasks.html#opennewscreen
e scorrere verso il basso per la parte intitolata "Restituzione di un Risultato da uno schermo"
Io uso spesso variabili statiche nell'attività chiamata con metodi setter statici per impostarle.
In questo modo posso cambiare i valori in qualsiasi attività a volontà, a prescindere dalla esatto flusso di controllo tra le varie attività.
Si noti che questo trucco può essere utilizzato solo se non vi interessa circa il istanza di più di una copia della stessa attività (classe) nella domanda, eppure ho trovato questo per essere il più facile da implementare, e lo uso più.
Il modo migliore per farlo è quello di mettere variabile a una classe comune che è definito al di fuori del campo di applicazione
public class Utils
{
public static String mPosition;
}
all'interno del codice (ad esempio onButtonClick ecc ...)
Intent intent = new Intent(Intent.ACTION_PICK,
ContactsContract.Contacts.CONTENT_URI);
Utils.mPosition = mViewData.mPosition + "";
LogHelper.e(TAG, "before intent: " + Utils.mPosition);
startActivityForResult(intent, Keys.PICK_CONTACT);
all'interno del codice di
@Override onActivityResult public void (int requestCode, int resultCode, i dati Intent) { if (requestCode == Keys.PICK_CONTACT) { if (resultCode == Activity.RESULT_OK) { Uri = DatiContatto data.getData ();
//you may use the variable here after intent result
LogHelper.e(TAG, "after intent: " + Utils.mPosition);
....