Как получить дополнительную информацию, которая передается через несколько действий при использовании startActivityForResult() в родительском действии?

Я хочу сделать приложение-викторину. действия выполняются следующим образом: MainActivity -> ProfileActivity -> NewProfileActivity -> QuestionActivity -> ResultActivity -> Main Activity.

В ProfileActivity он покажет список имен (с использованием recyclerview). и у него есть кнопка, которая вызывает startActivityForResult(). В NewProfileActivity у него есть кнопка, которая отправит дополнительную строку обратно в ProfileActivity.

Проблема в том, что я не хочу, чтобы NewProfileActivity возвращалась к ProfileActivity. Как передать лишнее через несколько действий, а затем отобразить на ProfileActivity?

В профиле активности

    Intent intent = getIntent();

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(ProfileActivity.this, NewProfileActivity.class);
            startActivityForResult(intent, NEW_PROFILE_ACTIVITY_REQUEST_CODE);
        }
    });

В методе onActivityResult()

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);

    if (requestCode == NEW_PROFILE_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK) {
        Profile profile = new Profile(intent.getStringExtra("profile_name"));
        mProfileViewModel.insert(profile);
    } else {
        Toast.makeText(getApplicationContext(),
                R.string.empty_not_saved,
                Toast.LENGTH_LONG).show();
    }
}

В NewProfileActivity

final Button save_profile_button = findViewById(R.id.button_save);
    save_profile_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String profile_name = mProfileNameView.getText().toString();
            Intent intent = new Intent(NewProfileActivity.this, QuestionActivity.class);
            intent.putExtra("profile_name_extra", profile_name);
            startActivity(intent);
        }
    });

для простоты, для остальных действий я передаю лишнее, помещая этот код в метод onCreate:

Intent intent = getIntent();
    final String profile_name = intent.getStringExtra("profile_name_extra");

и на кнопку я помещаю этот код:

Intent intent = new Intent(QuestionActivity.this, ResultActivity.class);
            intent.putExtra("profile_name_extra", profile_name);

person Ruzain Irfan    schedule 10.06.2018    source источник
comment
Можете ли вы быть немного более ясным в отношении того, чего вы пытаетесь достичь?   -  person shiredude95    schedule 10.06.2018
comment
В NewProfileActivity пользователю необходимо ввести свое имя, и это имя будет отображаться в ProfileActivity. Он работал раньше, но возвращается к ProfileActivity при нажатии кнопки в NewProfileActivity. Но я хочу, чтобы он перешел к QuestionActivity.   -  person Ruzain Irfan    schedule 10.06.2018
comment
Какую кнопку вы нажимаете и какие действия выполняет эта кнопка? Вы говорите о кнопке «Назад» или о какой-то пользовательской кнопке, которую вы реализовали?   -  person shiredude95    schedule 10.06.2018
comment
кнопка в NewProfileActivity. пользовательская кнопка.   -  person Ruzain Irfan    schedule 10.06.2018
comment
Эта кнопка всегда будет вести к QuestionActivity. Если вы хотите хранить данные между действиями, как упомянул комментатор ниже, вы можете просто использовать общие настройки.   -  person shiredude95    schedule 10.06.2018
comment
Спасибо за ваш ответ. я попробую использовать общие настройки.   -  person Ruzain Irfan    schedule 10.06.2018


Ответы (1)


Вы можете поместить данные в объект sharedPreferences, а затем получить их обратно в любом действии, которое сможете. Таким образом, вы можете избежать накладных расходов на передачу данных туда и обратно между несколькими действиями. Итак, в NewProfileActivity сохраните дополнения в sharedPreferences и извлеките их снова, где хотите. Документацию по записи и чтению данных из sharedPreferences можно найти здесь.

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

Надеюсь это поможет.

person Kunal Madan    schedule 10.06.2018
comment
Спасибо за ответ. мне все еще нужно использовать startActivityForResult() или просто использовать startActivity(), когда я хочу использовать общие настройки? - person Ruzain Irfan; 10.06.2018
comment
Вы можете использовать только startActivity(), теперь не нужно вызывать startActivityForResult(). - person Kunal Madan; 10.06.2018