Pregunta

¿Cómo pasar un valor de una pantalla a la pantalla anterior?

Considere este caso: Tengo dos actividades. La primera pantalla tiene un TextView y un botón y la segunda actividad tiene un EditText y un botón.

Si hago clic en el primer botón, entonces tiene que pasar a la segunda actividad y aquí usuario tiene que escribir algo en el cuadro de texto. Si se presiona el botón de la segunda pantalla a continuación, los valores del cuadro de texto deben ir a la primera actividad y que se debe mostrar en la primera TextView actividad.

¿Fue útil?

Solución

Para capturar las acciones realizadas en una actividad dentro de otro requiere tres pasos.

Lanzamiento de la Actividad secundaria (su 'Editar texto' Actividad) como mediante el uso de la subactividad startActivityForResult de su actividad principal.

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

Dentro de la subactividad, en lugar de cerrar la actividad cuando un usuario hace clic en el botón, es necesario crear una nueva Intención e incluir el valor de texto introducida en su paquete de extras. Para pasar de nuevo a la llamada setResult padres antes de llamar finish para cerrar la actividad secundaria.

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

El último paso consiste en la Actividad de llamadas: onActivityResult Ignorar para escuchar las devoluciones de llamada de la actividad de introducción de texto. Obtener el extra de la intención de volver a obtener el valor de texto que debe mostrar.

@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; 
    } 
  } 
} 

Otros consejos

Hay dos maneras por las cuales se puede acceder a las variables o en otras clases de objeto o actividad.

A. Base de datos

B. preferencias compartidas.

C. La serialización de objetos.

D. Una clase que puede contener datos comunes puede ser nombrado como utilidades comunes que depende de usted.

E. Pasando datos a través de los intentos y Interface parcelable.

depende de sus necesidades de proyectos.

A. Base de datos

SQLite es una base de datos de código abierto que se incrusta en Android. SQLite es compatible con funciones de bases de datos relacionales estándar como la sintaxis SQL, transacciones y declaraciones preparadas.

Tutoriales - http://www.vogella.com/articles/AndroidSQLite/ article.html

B. Preferencias compartidas

Supongamos que desea almacenar nombre de usuario. Por lo que habrá ahora dos cosas una clave nombre de usuario, Valor Valor.

¿Cómo almacenar

 // 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 () que puede salvar su dtatype deseada.

¿Cómo se ha podido recuperar

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
String userName = sharedPref.getString("userName", "Not Available");

http://developer.android.com/reference/android/content /SharedPreferences.html

C. serialización de objetos

serlization objeto se utiliza si queremos salvar a un estado de objeto para enviarlo a través de la red o se puede utilizar para su propósito también.

Utilice Java Beans y almacenar en él como uno de sus campos y getters y setter de uso para ese

JavaBeans son clases Java que tienen propiedades. Pensar en propiedades como variables de instancia privada. Ya que son privados, la única manera de que se puede acceder desde fuera de su clase es a través de métodos de la clase. los métodos que cambian el valor de una propiedad son llamados métodos setter, y los métodos que recuperan el valor de una propiedad son llamados métodos getter.

public class VariableStorage implements Serializable  {

    private String inString ;

    public String getInString() {
        return inString;
    }

    public void setInString(String inString) {
        this.inString = inString;
    }


}

Establecer la variable en usted envía método utilizando

VariableStorage variableStorage = new VariableStorage();
variableStorage.setInString(inString);

A continuación, utilice Serialzation objeto a serializar este objeto y en su otra clase deserializar este objeto.

En la serialización de un objeto puede ser representado como una secuencia de bytes que incluye los datos del objeto, así como información sobre el tipo de objeto y los tipos de datos almacenados en el objeto.

Después de un objeto serializado se ha escrito en un archivo, se puede leer desde el archivo y deserializar es decir, la información de tipo y los bytes que representan el objeto y sus datos pueden ser utilizados para crear el objeto en la memoria.

Si desea tutorial para este referirse este enlace

http://javawithswaranga.blogspot.in/2011/08 /serialization-in-java.html

obtener la variable en otras clases

D. CommonUtilities

Puede hacer una clase por su cuenta propia, que puede contener datos común que con frecuencia necesita en su proyecto.

muestra

public class CommonUtilities {

    public static String className = "CommonUtilities";

}

E. pasar datos a través Intentos

Por favor, consulte este tutorial para esta opción de pasar datos.

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

usted no tiene que ..

simplemente llamar newIntenet () de segunda actividad

Intent retData=new Intent();

Agregar datos a pasar de nuevo

putExtras (retData.putExtra("userName", getUsrName()));

seguir adelante con setResult

setResult(RESULT_OK, retData);

y después puede terminar

finish();

startActivityForResult ()

Y aquí hay un enlace desde el SDK con más información:

http://developer.android.com/guide/appendix /faq/commontasks.html#opennewscreen

y baje hasta la parte titulada "La devolución de un resultado de una pantalla"

A menudo utilizo variables estáticas en la actividad vocación con métodos setter estáticas para ajustarlos.

De esta manera puedo cambiar los valores en cualquier actividad a voluntad, sin tener en cuenta el flujo exacto de control entre las distintas actividades.

Tenga en cuenta que este truco sólo se puede utilizar si no se preocupan por la instanciación de más de una copia de la misma actividad (de clase) en la aplicación, sin embargo, me pareció que este es el más fácil de implementar, y lo uso más.

La mejor manera de hacer aquí es poner variable a una clase común que se define fuera del alcance

public class Utils 
{
    public static String mPosition;
}

dentro de su código (por ejemplo OnButtonClick etc ...)

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);

en el código de

@ Override     onActivityResult pública vacío (int requestCode, int resultCode, los datos de intención)     {         si (requestCode == Keys.PICK_CONTACT)         {             si (resultCode == Activity.RESULT_OK)             {                 Uri Datos de contacto = data.getData ();

            //you may use the variable here after intent result
            LogHelper.e(TAG, "after intent: " + Utils.mPosition);
....
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top