在父活动中使用startActivityForResult()时,如何获得通过多个活动传递的额外内容?

时间:2018-06-10 07:12:28

标签: android android-intent startactivityforresult

我想制作一个测验应用。活动流程如下: 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 :(得分:0)

您可以将数据放入sharedPreferences对象,然后在任何可用的Activity中将其检索回来。这样,您可以避免在多个活动之间来回传递数据的开销。 因此,在NewProfileActivity中将额外内容保存到sharedPreferences中,并在任何地方再次获取它。 可以在此处找到用于从sharedPreferences写入和读取数据的文档

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

希望这会有所帮助。