Как получить дополнительные, которые проходят через несколько действий при использовании startActivityForResult () в родительском действии? - PullRequest
0 голосов
/ 10 июня 2018

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

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

Проблема в том, что я не хочу, чтобы NewProfileActivity возвращалась к ProfileActivity.Как передать дополнительные данные через несколько действий и затем отобразить в 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);

1 Ответ

0 голосов
/ 10 июня 2018

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

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

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

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