Как передать данные из 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;