#java #android #android-intent #android-activity #onresume
Вопрос:
Я хочу отправить текст, введенный пользователем из текущего действия (который ПОХОЖ НА ДИАЛОГОВОЕ ОКНО, НО НЕ ОДИН). Упражнение 1 находится в фоновом режиме и выполняется. На данный момент я уже пытался это сделать:
Второй Код Действия:
submitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
if(companyNameEditText.getText().toString()!=null) {
intent.putExtra("companyName", companyNameEditText.getText().toString());
nameChanged=true;
finish();
}
else{
Toast.makeText(ChangeNameActivity.this,"Please enter a value",Toast.LENGTH_SHORT).show();
}
}
});
онДестрой для второго вида деятельности:
@Override
protected void onDestroy() {
super.onDestroy();
if(nameChanged)
{
activityFinishedWithChanges= true;
}
}
Первое занятие в резюме:
@Override
protected void onResume() {
super.onResume();
if(ChangeNameActivity.activityFinishedWithChanges) {
companyNameText = findViewById(R.id.companyNameText);
if (getIntent().hasExtra("companyName")) {
String companyName = getIntent().getStringExtra("companyName");
if (companyName != null) {
if (!companyName.equals("")) {
companyNameText.setText(companyName);
AppUtils.setNameSharedPreference(BrandSettingsActivity.this, AppConstants.organizationName, getIntent().getStringExtra("companyName"));
}
}
}
}
}
В моем случае я получаю нулевое значение.
Ответ №1:
Если я правильно понимаю ваш вопрос, вы хотите отправить данные из (Второго действия) в Ваше Предварительно открытое (Первое действие)
Итак, из вашей первой активности вызовите вторую активность, используя метод startActivityForResult()
Например:
int ACTIVITY_CODE= 1
Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, ACTIVITY_CODE);
В вашей второй активности установите данные, которые вы хотите вернуть обратно в первую активность.
Например: Во втором действии, если вы хотите отправить данные обратно:
Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);
finish();
Теперь в вашем классе FirstActivity напишите следующий код для метода onActivityResult ().
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ACTIVITY_CODE) {
if(resultCode == Activity.RESULT_OK){
String result=data.getStringExtra("result");
}
if (resultCode == Activity.RESULT_CANCELED) {
//Write your code if there's no result
}
}
}
Надеюсь, это решит вашу проблему 🙂
Комментарии:
1. Это сработало бы в большинстве случаев, но я использую onActivityResult для изображений. В любом случае, спасибо.
2. @javaOutlaw вы можете использовать его для обоих, вам просто нужно указать другой код запроса для названия вашей компании и запроса изображения. Например, вы можете использовать 1 в качестве кода запроса изображения и 2 для запроса компании и обрабатывать результат onActivityResult по-разному, если аргумент requestCode имеет значение 1 или 2.
3. Я попробую и дам вам знать.
Ответ №2:
Ваш текущий подход не работает, потому что созданное вами намерение, которое вы используете для получения названия компании, никоим образом не используется.
Вы должны использовать ActivityResult
функциональность класса ActivityClass. Основная концепция работает следующим образом:
Сначала вы начинаете действие с запроса на возврат результата с помощью Context.startActivitForResult(Намерение,код запроса). Новое действие запущено и имеет возможность что-то делать. Когда новое действие получило результат, оно устанавливает свой результат с помощью функции Context.SetResult() и завершает себя после этого. Когда новое действие будет завершено, действие функции завершится.onActivityResult(код запроса,код результата,данные) вызывается с тем же кодом запроса, определенным в Context.startActivitForResult(Намерение,код запроса), и данными и кодом результата, определенными в Context.SetResult().
Официальная документация рекомендует использовать api более высокого уровня: https://developer.android.com/training/basics/intents/result