Как вернуться к активности с ее перезапуском? - PullRequest
0 голосов
/ 05 октября 2019

У меня есть MainActivity и SubActivity, MainActivity запускает SubActivity с кодом:

    startActivity(new Intent(getApplicationContext(), SubActivity.class));
    overridePendingTransition(R.anim.slide_up, R.anim.no_animation);

Чем я делаю что-то в SubActivity, и после этого мне нужно вернуться в MainActivity с помощью пользовательской анимации. Также мне нужен способ обновить MainActivity, когда я вернусь к нему. Это код из SubActivity для перехода обратно к MainActivity, который вообще не работает:

    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
    startActivity(intent);
    overridePendingTransition(R.anim.no_animation, R.anim.slide_down);
    finish();

Если я позвоню:

    finish();
    overridePendingTransition(R.anim.no_animation, R.anim.slide_down);

Анимация применяется, и я возвращаюсь вбез изменений MainActivity, который запустил SubActivity.

Если я позвоню:

    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
    startActivity(intent);
    overridePendingTransition(R.anim.no_animation, R.anim.slide_down);

MainActivity воссоздается, но у меня нет анимации, также я не знаю, что случилось с предыдущей MainActivity, котораязапустил SubActivity.

Метод finish () описывается с помощью:

 *Call this when your activity is done and should be closed.  The
 * ActivityResult is propagated back to whoever launched you via
 * onActivityResult().

Но я не знаю, как использовать этот ActivityResult для обновления моей MainActivity.

Как я могу вернуться к MainActivity, используя анимацию (которая работает только с finish ()), и обновить ее, когда вернусь к ней?

Ответы [ 2 ]

1 голос
/ 05 октября 2019

Запустите вспомогательное действие, используя:

    Intent intent = new Intent(getApplicationContext(), SubActivity.class);
    startActivityForResult(intent, REQUEST_CODE);
    overridePendingTransition(R.anim.slide_up, R.anim.no_animation);

, если вы хотите вернуться к основному действию:

    Intent intent = new Intent();
    intent.putExtra("extra_data", "from subactivity");
    setResult(Activity.RESULT_OK, intent);
    finish();
    overridePendingTransition(R.anim.no_animation, R.anim.slide_down);

Внутри основного действия используйте этот метод для получения данных, отправленных по вспомогательному действию:

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

    if (requestCode == REQUEST_CODE) {

        if (resultCode == Activity.RESULT_OK) {
            String result = data.getStringExtra("extra_data");
            // do something with the result

        } else if (resultCode == Activity.RESULT_CANCELED) {
            // some stuff that will happen if there's no result
        }
    }
}
0 голосов
/ 05 октября 2019

Правильно, finish() - правильный метод для возврата к предыдущему действию, поскольку startActivity(intent); создает новый экземпляр этого действия. Чтобы передать данные в предыдущий этот экземпляр, вы можете использовать SharedPreferences:

Для хранения данных перед вызовом finish ()

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score_key), newHighScore);
editor.commit();

Для чтения из них, когда MainActivity onResume вызывается

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), 0);

https://developer.android.com/training/data-storage/shared-preferences

...