Android: активность будет воссоздана после завершения вызова - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь создать приложение, которое содержит два действия: MainActivity и SubActivity.

SubActivity будет создано из MainActivity путем вызова startActivityForResult().

Когда я нажимаю кнопку, установленную в SubActivity, она должна завершиться сама и перейти к MainActivity.Но у меня проблема с отделкой SubActivity.После вызова SubActivity.onPause(), немедленно будет вызван SubActivity.onCreate() и SubActivity будет воссоздан.

Я просто хочу закрыть SubActivity и отобразить MainActivity, но почему это происходит?

Я искал те же вопросы и обнаружил, что изменение поворота вызовет системный вызов onCreate ().Но в моем случае ориентация экрана зафиксирована в портретной ориентации.

Может кто-нибудь дать мне идею решить эту проблему?

РЕДАКТИРОВАТЬ: Я решил проблему.Была неправильная логика в MainActivity.

SubActivity будет создано из MainActivity, когда переменная содержит определенное значение.Метод обновления дисплея, который отражает значение переменной, вызывался дважды в коде.Это заставило мое приложение воссоздать SubActvity после finish().

MainActivity запросов на создание Subactivity дважды, но, поскольку мое приложение установлено как android:launchMode="singleTop", второе SubActivity может бытьсоздается только после того, как первый был закончен.Большое спасибо, чтобы дать мне совет!

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

В моем случае я вызвал следующие функции.

btn.setOnClickListener {
    setResult(result)
    finishActivity(REQUEST_CODE)
    finish()
}
0 голосов
/ 05 февраля 2019

Как вы описываете, я даю вам пример.С MainActivity вызовите SubActivity с помощью метода startActivityForResult ()

Например:

Intent intent = new Intent(this, SubActivity.class);
startActivityForResult(intent, 1);

Теперь в вашем SubActivity установите данные, которые вы хотите отправить обратно на MainActivity.(Ниже приведен пример)

С примером данных:

Intent intent = new Intent();
intent.putExtra("key",result);
setResult(Activity.RESULT_OK, returnIntent);
finish();

Пример данных отсутствует: (Если у вас нет данных, отправьте MainActivity)

Intent intent = new Intent();
setResult(Activity.RESULT_CANCELED, intent);
finish();

В вашем MainActivity Override onActivityResult() методе для получения результата.(Только если вы отправляете данные с SubActivity)

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1) {
        if(resultCode == Activity.RESULT_OK){
            String data=data.getStringExtra("key");
        }
        if (resultCode == Activity.RESULT_CANCELED) {
            //Write your code if there's no result
        }
    }
}
0 голосов
/ 04 февраля 2019

Вы можете использовать или сначала проверить поведение,

1) finishAffinity();

2) finishActivityFromChild();

Пусть это сработает.

В противном случае для лучшего общения поместите здесь строку кода, чтобы мы правильно поняли и дали вам некоторые рекомендации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...