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



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



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



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

512   6  

6 ответов:

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

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

последний шаг находится в вызывающей активности: Override 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; 
    } 
  } 
} 

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

Базы Данных А.

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

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

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

E. передача данных через Intents и Parcelable интерфейс.

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

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

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

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

Б. Общие Параметры

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

Как хранить

 // 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

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

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

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

JavaBeans-это классы Java, которые имеют свойства. Думать о свойства как частные переменные экземпляра. Поскольку они частные, единственный способ они могут быть доступны из-за пределов своего класса через методы в классе. Этот методы, изменяющие значение свойства, называются сеттер методы, а также методы что получить значение свойства называются 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);

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

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

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

если вы хотите учебник для этого обратитесь по этой ссылке

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

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

D. 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/

вы не должны..

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

Intent retData=new Intent();

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

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

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

setResult(RESULT_OK, retData);

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

finish();

startActivityForResult()

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

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

и прокрутите вниз до части под названием "возврат результата с экрана"

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

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

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

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

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 общественного недействительными метод onActivityResult(тип int requestCode, resultCode инт намерениях данных) { если (requestCode == ключи.PICK_CONTACT) { если (resultCode = = Activity.RESULT_OK) { Uri contactData = данные.getData ();

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

Comments

    Ничего не найдено.