Деятельность завершена после получения результата с помощью onActivityResult - PullRequest
0 голосов
/ 04 марта 2019

Сценарий:

MainActivity (назовем это мероприятие A) имеет 3 фрагмента и начинает действие B. Затем выполняется действие B, затем startActivityForResult (действие C).Проблема заключается в том, что при установке результата OK для действия C и вызове onBackPress вызывается startActivityForResult для действия B, но затем действие B закрывается через несколько секунд.

Действие A -> Действие B -> Действие C (для результата), Результат ОК, конец

Затем -> Операция B onActivityResult вызывается с Результатом ОК, но операция Б завершается и возвращается к ActivityA, который дважды перезагружается (я использовал Logcat и увидел, что onDestroy и onCreate вызывались дважды для обоихЗанятие B и Занятие A).

Найти следующее, но мне не очень помогло Действие закрыто после вызова onActivityResult

Попытался посмотреть на launchMode

Вот манифест:

<activity
            android:name=".activities.ActivityA"
            android:screenOrientation="portrait"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:theme="@style/AppTheme.NoActionBar"
            android:windowSoftInputMode="stateHidden">
    </activity>

    <activity
            android:name=".activities.ActivityB"
            android:screenOrientation="portrait"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:theme="@style/AppTheme.NoActionBar.Profile">
    </activity>

    <activity
            android:name=".activities.ActivityC"
            android:screenOrientation="portrait"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:theme="@style/AppTheme.NoActionBar.Profile"
            android:windowSoftInputMode="stateHidden|adjustPan">
    </activity>

Вот запуски:

Занятие А в Занятие B:

intent = Intent(this@ActivityA, ActivityB::class.java)
            intent.putExtra("user", user)
            startActivity(intent)

Занятие В в Занятие C:

val intent = Intent(this@ActivityB, ActivityC::class.java)
    intent.putExtra("user", user)

Результат настройки действия C в норме и окончание:

setResult(Activity.RESULT_OK)
finish()

Скриншот поведения: https://youtu.be/gMlH5iujoh0

Любая помощь приветствуется

изданиеэто: Деятельность B onActivityResult

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == REQUEST_CODE_EDIT_PROFILE && resultCode == Activity.RESULT_OK) {
        Timber.e("REQUEST_CODE_EDIT_PROFILE OK AND RESULT OK")
        HelperTools(applicationContext).toastStatus(
            getString(R.string.your_profile_has_been_updated),
            Toast.LENGTH_SHORT,
            ToastType.SUCCESS
        )
        populateData(user)
    }
}

1 Ответ

0 голосов
/ 04 марта 2019
val intent = Intent(this@ActivityB, ActivityC::class.java)
startActivityForResult(Intent(this@ActivityB,ActivityC::class.java),REQUEST_CODE_EDIT_PROFILE ))

Пожалуйста, подтвердите, что данные передаются и принимаются корректно по журналу, а также найдите причину onDestroy

Ниже пример кода для получения данных дешифруемой

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case REQUEST_CODE_CONTACT_SELECTION:
            if (resultCode == Activity.RESULT_OK) {
                assert data != null;
                ContactModel mContactModel = data.getParcelableExtra("contactResult");

                new MessageDialog(this)
                        .setMessage(getString(R.string.are_you_sure_you_want_to_block_contact, mContactModel.getFullName()))
                        .setPositiveButton(getString(R.string.yes), (dialog, which) -> {
                            dialog.dismiss();
                            API_blockUnblockContact(mContactModel, true);
                        })
                        .setNegativeButton(getString(R.string.no), (dialog, which) -> dialog.dismiss()).show();
            }
            if (resultCode == Activity.RESULT_CANCELED) {
                //Write your code if there's no result
                Logger.e(TAG, "Result Canceled");
            }
            break;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...