是否可以使用对象而不是类来启动Activity?

时间:2016-03-13 22:57:03

标签: java android

让我们说我有一个主动控制我的应用程序的流量。在这个活动中,我有一些偶尔会更新的数据列表。

mainactivity根据用户输入启动其他活动。

@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.Class启动一个Intent,我想通过引用ScoreBoard对象来启动它,这样就可以做到这样的事情:

ScoreBoard scoreboard = new ScoreBoard();
startActivityForResult(scoreboardIntent, 0);

//then if my datalistener triggers
scoreboard.updateStuff();

我知道我可以将监听器移动到Scoreboard类,但我想知道是否可以这样做。

任何见解都将受到赞赏。

编辑:按照CommonsWare的比喻,活动将是单独的页面。目前有三个活动,虽然它们都是独立的,但它们中的两个需要访问同一个DB。  1.主菜单这是一个列表视图,包含(以及其他内容)开始新游戏或查看排行榜的选项。  2.比赛。除了来自mainmenus startActivityForResult()的回调之外,此Activity不与其他任何内容交互;游戏结束后,分数返回并需要存储在DB的某个地方。  3.排行榜。此活动显示列表中的最高分。

所以这就是我的困境:如果我将数据库监听器放在mainmenu中,我将能够将Game回调存储到DB中,并且我将能够通过bundle或intentextras传递列表来触发排行榜。但是,当我的监听器对数据库中的更改做出反应时,我将无法更新排行榜。如果我将DB监听器放在排行榜中,我将能够立即显示基础数据的变化,但是如果不在主菜单中添加DB对象,我将无法保存新游戏的分数。(除非我遗漏了什么)< / p>

我认为最好的解决方案是让mainmenu可以访问数据库,并将排行榜变成一个片段列表,当活动显示在主菜单之上时。任何有关我失踪的解决方案或解释的建议都会受到高度赞赏,因为我对活动沟通方式的理解似乎有点瑕疵。

1 个答案:

答案 0 :(得分:2)

  

但我想知道是否有可能这样做

不,有两个原因:

  1. 您无法通过构造函数

  2. 自行创建工作活动实例
  3. 没有Intent机制可以将Activity传递给另一个Activity

  4. 如果这些活动紧密结合,也许它们根本不应该是单独的活动,而应该是一个单独的活动。

    举一个类比:如果这是一个Web应用程序,这个功能是属于两个单独的网页,还是一个页面?如果是后者,请使用一项活动。如果是前者,则使用两个活动......但是,您需要处理这些活动之间的分离,就像您需要处理Web应用程序中Web页面之间的分离一样。