Как передать значения из одной активности в предыдущую деятельность

Как передать значение с одного экрана на предыдущий экран?

Рассмотрим этот случай: у меня есть два вида деятельности. На первом экране есть одна TextView и кнопка, а вторая активность имеет один EditText и кнопку.

Если я нажму на первую кнопку, тогда вам нужно перейти к второму действию, и здесь пользователь должен ввести что-то в текстовое поле. Если он нажмет кнопку со второго экрана, то значения из текстового поля должны перейти к первому действию и должны отображаться в первом действии TextView.

Ответ 1

Для захвата действий, выполняемых над одним действием в другом, требуется три шага.

Запустите вторичное действие (ваше действие "Редактировать текст") как вспомогательное действие, используя startActivityForResult из вашего основного действия.

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

Вместо того, чтобы просто закрывать действие, когда пользователь нажимает кнопку, в подчиненной деятельности вам нужно создать новое намерение и включить введенное текстовое значение в свой пакет дополнительных функций. Чтобы передать его родителю, вызовите setResult перед вызовом finish, чтобы закрыть вторичное действие.

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

Последний шаг заключается в вызове Activity: переопределить onActivityResult для прослушивания обратных вызовов из текстовой записи Activity. Получите дополнительную информацию из возвращенного Намерения, чтобы получить текстовое значение, которое вы должны отображать.

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

Ответ 2

Существует несколько способов доступа к переменным или объектам в других классах или в Activity.

а. База данных

В. общие предпочтения.

С. Сериализация объектов.

Д. Класс, который может содержать общие данные, может быть назван как Common Utilities, он зависит от вас.

Е. Передача данных через Intents и Parcelable Interface.

Это зависит от ваших потребностей проекта.

а. База данных

SQLite - это база данных с открытым исходным кодом, встроенная в Android. SQLite поддерживает стандартные функции реляционных баз данных, такие как синтаксис SQL, транзакции и подготовленные операторы.

Учебники - http://www.vogella.com/articles/AndroidSQLite/article.html

В. Общие настройки

Предположим, вы хотите сохранить имя пользователя. Итак, теперь будет два элемента: Key Username, Значение.

Как сохранить

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

Используя putString(), putBoolean(), putInt(), putFloat(), putLong(), вы можете сохранить желаемый тип dtatype.

Как получить

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

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

С. Сериализация объектов

Serlization объекта используется, если мы хотим сохранить состояние объекта, чтобы отправить его по сети, или вы также можете использовать его для своей цели.

Используйте java beans и сохраните в нем как одно из своих полей и используйте для этого геттеры и сеттеры

JavaBeans - это классы Java, обладающие свойствами. Думать о свойства как частные переменные экземпляра. Поскольку они являются частными, единственный способ к ним можно получить доступ извне своего класса через методы в классе. методы, которые изменяют значение свойства, называются методами setter, а методы которые извлекают значение свойства, называются методами getter.

public class VariableStorage implements Serializable  {

    private String inString ;

    public String getInString() {
        return inString;
    }

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


}

Задайте переменную в своем почтовом методе, используя

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

Затем используйте объект Serialzation для сериализации этого объекта, а в другом классе десериализуйте этот объект.

В сериализации объект может быть представлен как последовательность байтов, которая включает данные объекта, а также информацию о типе объекта и типах данных, хранящихся в объекте.

После того, как сериализованный объект был записан в файл, он может быть прочитан из файла и десериализован, то есть информация о типе и байты, которые представляют объект и его данные, могут быть использованы для воссоздания объекта в памяти.

Если вы хотите, чтобы учебник для этого ссылался на эту ссылку

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

Получить переменную в других классах

Д. CommonUtilities

Вы можете создать класс по себе, который может содержать общие данные, которые вам часто нужны в вашем проекте.

Пример

public class CommonUtilities {

    public static String className = "CommonUtilities";

}

Е. Передача данных с помощью намерений

Пожалуйста, обратитесь к этому руководству для этой опции передачи данных.

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

Ответ 3

тебе не нужно...

Просто вызовите newIntent() из второго действия

Intent retData=new Intent();

Добавить данные для передачи обратно

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

Продолжайте с setResult

setResult(RESULT_OK, retData);

А потом можете закончить

finish();

Ответ 5

Я часто использую статические переменные в вызывающей активности со статическими установщиками для их установки.

Таким образом, я могу изменять значения в любой активности по желанию, независимо от точного потока управления между различными видами деятельности.

Обратите внимание, что этот трюк можно использовать, только если вас не волнует создание нескольких экземпляров одной и той же активности (класса) в приложении, но я нашел, что это проще всего реализовать, и я использую его больше всего.

Ответ 6

Лучший способ сделать это - поместить переменную в общий класс, который определяется вне области

public class Utils 
{
    public static String mPosition;
}

внутри вашего кода (например, OnButtonClick и т.д.)

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

внутри кода

@Override   public void onActivityResult (int requestCode, int resultCode, Intent data)   {       if (requestCode == Keys.PICK_CONTACT)       {           if (resultCode == Activity.RESULT_OK)           {               Uri contactData = data.getData();

            //you may use the variable here after intent result
            LogHelper.e(TAG, "after intent: " + Utils.mPosition);
....