Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以用对象而不是类来启动活动?_Java_Android - Fatal编程技术网

Java 是否可以用对象而不是类来启动活动?

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

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

Main活动根据用户输入启动其他活动

@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应用程序中网页之间的分离一样

    但我想知道这样做是否可行

    不,有两个原因:

  • 您不能通过构造函数自己创建工作活动实例

  • 没有
    意图
    机制将一个
    活动
    传递给另一个
    活动

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


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

    请考虑改用片段,这样您就可以创建和操作部分UI,而无需将当前活动留给您的控制逻辑。@DougStevenson谢谢,我想我会把排行榜变成一个碎片列表。更新的问题,以更好地解释我试图实现的。考虑使用片段代替,这将允许您创建和操作您的UI部分,而不为您的控制逻辑留下当前活动。@道格史蒂文森,谢谢,我想我会把排行榜转换成片段列表。更新的问题,以更好地解释我试图实现的目标。感谢您的洞察力。我担心情况会是这样。编辑的问题和一些更多的解释作为对你的类比的回应。谢谢你的洞察力。我担心情况会是这样。对你的类比进行了编辑,并作了进一步解释。
    ScoreBoard scoreboard = new ScoreBoard();
    startActivityForResult(scoreboardIntent, 0);
    
    //then if my datalistener triggers
    scoreboard.updateStuff();