Как передать данные от 2-го действия до 1-го действия при нажатии? – Андроид

У меня есть 2 действия, Activity1 и Activity2 .

В Activity1 у меня есть Button и TextView . При нажатии кнопки Activity2 запускается.

В Activity2 у меня есть EditText .

Я хочу отобразить данные, полученные из EditText в Activity2 в TextView в Activity1, когда назад нажата функция Activity2 .

Может ли кто-нибудь помочь мне с кодом, чтобы сделать эту работу?

Solutions Collecting From Web of "Как передать данные от 2-го действия до 1-го действия при нажатии? – Андроид"

Запустите Activity2 с помощью startActivityForResult и используйте метод setResult для отправки данных из Activity2 в Activity1. В Activity1 вам необходимо переопределить onActivityResult для обновления TextView с данными EditText из Activity2.

Например:

В Activity1 запустите Activity2 как:

 Intent i = new Intent(this, Activity2.class); startActivityForResult(i, 1); 

В Activity2 используйте setResult для отправки данных назад:

 Intent intent = new Intent(); intent.putExtra("editTextValue", "value_here") setResult(RESULT_OK, intent); finish(); 

И в Activity1 , получите данные с onActivityResult :

 public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1) { if(resultCode == RESULT_OK) { String strEditText = data.getStringExtra("editTextValue"); } } } 

Если вы можете, также используйте SharedPreferences для обмена данными между Activity .

В Activity2 ,

 @Override public void onBackPressed() { String data = mEditText.getText(); Intent intent = new Intent(); intent.putExtra("MyData", data); setResult(resultcode, intent); } 

В Activity1 ,

 onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { if(resultCode == RESULT_OK) { String myStr=data.getStringExtra("MyData"); mTextView.setText(myStr); } } } 

Другие ответы не работали, когда я ставил setResult в onBackPressed . Комментируя вызов super onBackPressed и вызов finish вручную решает проблему:

 @Override public void onBackPressed() { //super.onBackPressed(); Intent i = new Intent(); i.putExtra(EXTRA_NON_DOWNLOADED_PAGES, notDownloaded); setResult(RESULT_OK, i); finish(); } 

И в первой деятельности:

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == QUEUE_MSG) { if (resultCode == RESULT_OK) { Serializable tmp = data.getSerializableExtra(MainActivity.EXTRA_NON_DOWNLOADED_PAGES); if (tmp != null) serializable = tmp; } } } 

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

В Activity2,

 @Override public void onBackPressed() { String data = mEditText.getText(); SharedPreferences sp = getSharedPreferences("LoginInfos", 0); Editor editor = sp.edit(); editor.putString("email",data); editor.commit(); } 

В Activity1,

  @Override public void onResume() { SharedPreferences sp = getSharedPreferences("LoginInfos", 0); String dataFromOtherAct= sp.getString("email", "no email"); } 

Прочтите эти:

  1. Результат возврата к onActivityResult ()
  2. Получение результатов из вызываемой активности – учебник для начинающих от Android

Эти статьи помогут вам понять, как передавать данные между двумя действиями в Android.

TL; DR Использовать Activity.startActivityForResult

Длительный ответ:

Вы должны начать с чтения документации разработчика Android. В частности, тема вашего вопроса рассматривается в разделе « Starting Activities and Getting Results » документации « Activity .

Как например, код, Android SDK дает хорошие примеры. Кроме того, другие ответы здесь дают вам короткие фрагменты кода примера для использования.

Однако, если вы ищете альтернативы, прочитайте этот вопрос . Это хорошая дискуссия о том, как использовать startActivityForResults с фрагментами, а также пара подходов к передаче данных между действиями.

Это ваш первый Activity1.

 public class Activity1 extends Activity{ private int mRequestCode = 100; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(this, Activity2.class); startActivityForResult(intent, mRequestCode); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == mRequestCode && resultCode == RESULT_OK){ String editTextString = data.getStringExtra("editText"); } } } 

Отсюда вы начинаете свой Activity2.class с помощью startActivityForResult (mRequestCode, Activity2.class);

Теперь это ваше второе действие, имя – Activity2

 public class Activity2 extends Activity { private EditText mEditText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //mEditText = (EditText)findViewById(R.id.edit_text); Intent intent = new Intent(); intent.putExtra("editText", mEditText.getText().toString()); setResult(RESULT_OK, intent); } } 

Теперь, когда вы закончили свое второе действие, вы вызываете метод setResult (), из onBackPress () или любой кнопкой, когда ваш Activity2 будет уничтожен, ваш метод обратного вызова Activity1 onActivityResult () будет вызывать оттуда, вы можете получить свои данные от намерения ..

Надеюсь, это поможет вам … 🙂

С вашего FirstActivity вызовите SecondActivity, используя метод startActivityForResult ().

Например:

 Intent i = new Intent(this, SecondActivity.class); startActivityForResult(i, 1); 

В вашей SecondActivity задайте данные, которые вы хотите вернуть в FirstActivity. Если вы не хотите возвращаться назад, не устанавливайте его.

Например: В SecondActivity, если вы хотите отправить обратно данные:

 Intent returnIntent = new Intent(); returnIntent.putExtra("result",result); setResult(Activity.RESULT_OK,returnIntent); finish(); 

Если вы не хотите возвращать данные:

 Intent returnIntent = new Intent(); setResult(Activity.RESULT_CANCELED, returnIntent); finish(); 

Теперь в вашем классе FirstActivity напишите следующий код для метода onActivityResult ().

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { if(resultCode == Activity.RESULT_OK){ String result=data.getStringExtra("result"); } if (resultCode == Activity.RESULT_CANCELED) { //Write your code if there's no result } } }