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

StackOverflow https://stackoverflow.com/questions/1124548

  •  13-09-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

Запустите дополнительное действие (ваше действие "Редактировать текст") в качестве подактивности, используя 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();

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

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

Другие советы

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

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

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

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

D.Класс, который может содержать общие данные, может быть назван как Общие утилиты, это зависит от вас.

E.Передача данных через Intents и Разделяемый интерфейс.

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

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

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

Руководства -- http://www.vogella.com/articles/AndroidSQLite/article.html

B. Общие Предпочтения

Предположим, вы хотите сохранить имя пользователя.Итак, теперь будут две вещи, а Клавиша Имя пользователя, Значение Ценность.

Как хранить

 // 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(), вы можете сохранить желаемый тип данных.

Как получить

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

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

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

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

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

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

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

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

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

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

Если вам нужен учебник по этому вопросу, обратитесь по этой ссылке

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

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

D. Обычное использование

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

Образец

public class CommonUtilities {

    public static String className = "CommonUtilities";

}

E. Передача данных через Намерения

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

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

тебе не обязательно..

просто вызовите newIntenet()из второго действия

Intent retData=new Intent();

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

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

продолжайте с SetResult

setResult(RESULT_OK, retData);

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

finish();

startActivityForResult() Стартовая активностьforresult()

И вот ссылка из SDK с дополнительной информацией:

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

и прокрутите вниз до части, озаглавленной "Возврат результата с экрана".

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

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

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

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

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

внутри кода

@Переопределить общедоступный недействительный результат при активации (int requestCode, int resultCode, данные намерения) { если (requestCode == Ключи.ВЫБЕРИТЕ_КОНТАКТ) { if (Код результата == Действие.RESULT_OK) { Uri contactData = data.getData();

            //you may use the variable here after intent result
            LogHelper.e(TAG, "after intent: " + Utils.mPosition);
....
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top