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à.

È stato utile?

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

Get variabile in altre classi

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.

http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelable-classes/

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);
....
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top