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


у меня есть 2 мероприятия,деятельности1 и действие activity2.

на Activity1 Я и TextView. При нажатии на кнопку действие activity2 есть.

на Activity2 Я EditText.

Я хочу отобразить данные, полученные из EditText на действие activity2 на TextView на деятельности1 когда обратно нажата от действие activity2.

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

9 131

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

читать это:

  1. возвращает результат в onActivityResult ()
  2. извлечение результата из вызванного 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;