不将数据发送到下一个活动,而是发送到之后的活动(使用 parcelable)
Posted
技术标签:
【中文标题】不将数据发送到下一个活动,而是发送到之后的活动(使用 parcelable)【英文标题】:Send data not to next activity, but the one after (using parcelable) 【发布时间】:2018-04-22 17:10:17 【问题描述】:假设在活动 A(得分)中,我创建了自定义类 Player 的实例。如何将这些对象发送到 Activity C,而无需在 Activity B (SelectGamemode) 中处理它们?这就是我通过 Parcelable 将对象从 Activity A 发送到 B 的方式。
btnNewRound = (Button) findViewById(R.id.btnNewRound);
btnNewRound.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Intent intent = new Intent(Score.this, SelectGamemode.class);
Bundle bundle = new Bundle();
bundle.putParcelable("EXTRA_PLAYER_1", player1);
bundle.putParcelable("EXTRA_PLAYER_2", player2);
bundle.putParcelable("EXTRA_PLAYER_3", player3);
bundle.putParcelable("EXTRA_PLAYER_4", player4);
intent.putExtras(bundle);
startActivity(intent);
);
现在我可以像这样在 Activity B 中访问我的 Player 对象:
player1= (Player)getIntent().getParcelableExtra("EXTRA_PLAYER_1");
然后在 Activity B 中,我基本上会使用与 Activity A 中相同的代码将 Player 对象发送到 Activity C,尽管我什至不使用 Activity B 中的对象。如何避免这种情况?谢谢!
【问题讨论】:
您可以使用共享首选项或数据库吗?随时随地获取它们。 使用共享首选项或数据库,或者通过第二个活动,可能不使用它,然后再到第三个,即使它显然效率较低 我去试试数据库,谢谢! 【参考方案1】:听起来你目前有这个活动流程:
A -> B -> C
也许更好的流程是:
A -> B
B returns result to A
A -> C
我是从您的一些小问题中推断出来的,但听起来活动 A 负责创建玩家,活动 B 负责选择游戏模式。然后活动 C 获取玩家和选定的游戏模式,并对他们做一些事情。以下是一些伪代码,说明如何将我的建议应用于这种情况:
// in Activity A
public void startChooseGameMode()
Intent intent = new Intent(this, ActivityB.class);
startActivityForResult(intent, 123); // 123 is an example requestCode
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if (reqeustCode == 123)
if (resultCode == Activity.RESULT_OK)
GameMode mode = data.getParcelableExtra("EXTRA_GAME_MODE");
Intent intent = new Intent(this, ActivityC.class);
intent.putExtra("EXTRA_GAME_MODE", mode);
intent.putExtra("EXTRA_PLAYER_1", player1);
intent.putExtra("EXTRA_PLAYER_2", player2);
intent.putExtra("EXTRA_PLAYER_3", player3);
intent.putExtra("EXTRA_PLAYER_4", player4);
startActivity(intent);
else
// handle the error/cancellation
// in Activity B
public void chooseGameMode(GameMode mode)
Intent data = new Intent();
data.putExtra("EXTRA_GAME_MODE", mode);
setResult(Activity.RESULT_OK, data);
finish();
在某些方面,这与您原来的问题是同一个问题,只是方向不同;现在活动 A 必须知道活动 B 的 GameMode
结果,即使它不直接使用它。我认为这没关系。您可以将 Activity A 视为负责收集启动 Activity C 所需的所有数据...也许在未来,您会以不同的方式创建玩家,并将该工作卸载到第四个 Activity。
【讨论】:
以上是关于不将数据发送到下一个活动,而是发送到之后的活动(使用 parcelable)的主要内容,如果未能解决你的问题,请参考以下文章