Java 是否可以用对象而不是类来启动活动?
假设我有一个主活动控制我的应用程序的流程。在这个活动中,我有一些偶尔更新的数据列表 Main活动根据用户输入启动其他活动Java 是否可以用对象而不是类来启动活动?,java,android,Java,Android,假设我有一个主活动控制我的应用程序的流程。在这个活动中,我有一些偶尔更新的数据列表 Main活动根据用户输入启动其他活动 @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (id == 0) { openLogin(); } if ( id == 1) { Intent intent = n
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (id == 0) {
openLogin();
}
if ( id == 1) {
Intent intent = new Intent(getApplicationContext(), MyGame.class);
intent.putExtra("game", getGame());
intent.putExtra("bonus", getBonusFields());
startActivityForResult(intent, 0);
}
if ( id == 2) {
scoreboardIntent = new Intent(getApplicationContext(), ScoreBoard.class);
Bundle scoreboardBundle = new Bundle();
scoreboardBundle.putSerializable("players", scores);
scoreboardIntent.putExtra("players", scoreboardBundle);
scoreboardOpen = true;
startActivityForResult(scoreboardIntent, 0);
}
}
我知道我可以把听者转移到Scoreboard类,但我想知道是否也可以这样做
如有任何见解,将不胜感激
编辑:按照Commonware的类比,活动将是单独的页面。目前有三个活动,虽然它们都是独立的,但其中两个需要访问同一个数据库。
1.主菜单。这是一个列表视图,其中包含启动新游戏或查看排行榜的选项。
2.游戏此活动不会与主菜单startActivityForResult()中的回调之外的任何其他内容交互;游戏结束后,将返回分数,并需要将其存储在DB中的某个位置。
3.排行榜。此活动显示列表中的最高分
因此,我的困境是:如果我将数据库侦听器放在主菜单中,我将能够将游戏回调存储到DB中,并且我将能够通过bundle或intentextras传递列表来触发排行榜。但是,当我的听众对数据库中的更改做出反应时,我将无法更新排行榜。如果我将DB listener放在排行榜中,我将能够立即显示基础数据的更改,但如果不在主菜单中添加DB对象,我将无法保存新游戏的分数。(除非我缺少某些内容)
我认为最好的解决方案是让mainmenu访问DB,并将排行榜变成一个片段列表,当活动时显示在mainmenu的顶部。对于我所缺少的任何其他解决方案或解释的建议都将不胜感激,因为我对活动沟通方式的理解似乎有点缺陷
但我想知道这样做是否可行
不,有两个原因:
意图
机制将一个活动
传递给另一个活动
意图
机制将一个活动
传递给另一个活动
打个比方:如果这是一个Web应用程序,那么该功能属于两个单独的网页还是一个网页?如果是后者,请使用一个活动。如果是前者,请使用两个活动。。。但是,您需要处理这些活动之间的分离,就像您需要处理Web应用程序中网页之间的分离一样。请考虑改用片段,这样您就可以创建和操作部分UI,而无需将当前活动留给您的控制逻辑。@DougStevenson谢谢,我想我会把排行榜变成一个碎片列表。更新的问题,以更好地解释我试图实现的。考虑使用片段代替,这将允许您创建和操作您的UI部分,而不为您的控制逻辑留下当前活动。@道格史蒂文森,谢谢,我想我会把排行榜转换成片段列表。更新的问题,以更好地解释我试图实现的目标。感谢您的洞察力。我担心情况会是这样。编辑的问题和一些更多的解释作为对你的类比的回应。谢谢你的洞察力。我担心情况会是这样。对你的类比进行了编辑,并作了进一步解释。
ScoreBoard scoreboard = new ScoreBoard();
startActivityForResult(scoreboardIntent, 0);
//then if my datalistener triggers
scoreboard.updateStuff();