Как передать данные из 2-го действия в 1-е действие при нажатии назад? - андроид
у меня есть 2 мероприятия,деятельности1 и действие activity2.
на Activity1
Я и TextView.
При нажатии на кнопку действие activity2 есть.
на Activity2
Я EditText.
Я хочу отобразить данные, полученные из EditText на действие activity2 на TextView на деятельности1 когда обратно нажата от действие activity2.
кто-нибудь может помочь мне с кодом, чтобы сделать эту работу?
9 ответов:
начать действие activity2 с
startActivityForResult
и использоватьsetResult
метод для отправки данных обратно из Activity2 в Activity1. В Activity1 вам нужно будет переопределитьonActivityResult
обновлениеTextView
СEditText
данные из Действие activity2.например:
In деятельности1, начните Activity2 как:
Intent i = new Intent(this, Activity2.class); startActivityForResult(i, 1);
In действие activity2 используйте
setResult
для отправки данных обратно:Intent intent = new Intent(); intent.putExtra("editTextValue", "value_here") setResult(RESULT_OK, intent); finish();
и в деятельности1, получать данные с
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 для обмена данными между деятельности.
деятельности1 должны начать действие activity2 С
startActivityForResult()
.действие activity2 должны использовать
setResult()
отправить данные обратно в деятельности1.на действие activity2,
@Override public void onBackPressed() { String data = mEditText.getText(); Intent intent = new Intent(); intent.putExtra("MyData", data); setResult(resultcode, intent); }
на деятельности1,
onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { if(resultCode == RESULT_OK) { String myStr=data.getStringExtra("MyData"); mTextView.setText(myStr); } } }
другие ответы не работали, когда я ставлю
setResult
наonBackPressed
. Комментируя вызов супер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"); }
читать это:
- возвращает результат в onActivityResult ()
- извлечение результата из вызванного activity - Android Tutorial для начинающих
эти статьи помогут вам понять, как передавать данные между двумя видами деятельности в Android.
это ваша первая Деятельность1.
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"); } } }
отсюда вы начинаете свою Деятельность2.класс с помощью startActivityForResult (mRequestCode, Activity2.класс);
теперь это ваша вторая деятельность, имя 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 } } }
TL; DR Use
Activity.startActivityForResult
ответ:
вы должны начать с чтения документации разработчика Android. В частности, тема вашего вопроса рассматривается в
Starting Activities and Getting Results
наActivity
документация.как например код, Android SDK предоставляет хорошие примеры. Кроме того, другие ответы здесь дают вам короткие фрагменты примера кода для использования.
однако, если вы ищете альтернативы, читайте это так вопрос. Это хорошая дискуссия о том, как использовать
startActivityForResults
С фрагментами, а также несколько других подходов для передачи данных между мероприятиями.
и у меня есть проблема, которую я хотел сделать это отправка типа данных в программной кнопке, которую я сделал и программная клавиша, которая является по умолчанию в каждом устройстве Android, так что я сделал это, сначала я сделал
Intent
в моем "а"Activity
:Intent intent = new Intent(); intent.setClass(context, _AddNewEmployee.class); intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivityForResult(intent, 6969); setResult(60);
затем в моей второй деятельности, я объявил поле в моем "B"
Activity
:private static int resultCode = 40;
затем после того, как я сделал свой запрос успешно или всякий раз, когда я хотел сказать" а " деятельность, что эта работа успешно выполнена здесь изменить значение resultCode к тому же я сказал в "A"
Activity
который в моем случае является "60" , а затем:private void backToSearchActivityAndRequest() { Intent data = new Intent(); data.putExtra("PhoneNumber", employeePhoneNumber); setResult(resultCode, data); finish(); } @Override public void onBackPressed() { backToSearchActivityAndRequest(); }
PS: Не забудьте удалить
Super
из метода onBackPressed, если вы хотите, чтобы это работало правильно.тогда я должен позвонить
onActivityResult
метод в моей деятельности "а", а также:@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 6969 && resultCode == 60) { if (data != null) { user_mobile = data.getStringExtra("PhoneNumber"); numberTextField.setText(user_mobile); getEmployeeByNumber(); } } }
вот и все, надеюсь, что это поможет вам. #HappyCoding;