繁体   English   中英

从非 Activity 类启动 Activity

[英]Start an Activity from a non-Activity class

我正在使用 Android Studio 制作一个小游戏,它有 3 个活动: Menu 、 Main(Game) 、 WinScreen 。 当我尝试从 Menu 转到 Main 或 WinScreen 到 Main 时,它工作得很好,但是当我尝试从 Main 活动启动活动时,出现错误。

我在 java 文件中有一个方法,可以检查玩家是否赢了,如果是这种情况,它应该启动 WinScreen 活动。

boolean checkWin(GameBoard gameboard){
       if(compareTabs(gameboard) == true){
           System.out.println("Win !");
           Intent i = new Intent(MainActivity.this,WinActivity.class);
           startActivity(i);
           return true;
       }
       else{
           return false;
       }
}

这是我得到的错误:错误:不是封闭类:MainActivity

此方法位于名为 GameBoard 的文件中,GameBoard 由在 MainActivity 开始时启动的 GameView 类使用

我知道有数百个帖子与我的类似,但我已经尝试了我已经找到的所有内容,但似乎没有任何效果,而且我很确定这是一个非常愚蠢的问题。

我已经尝试过诸如Intent i = new Intent(this,WinActivity.class);

请注意,如果从 Activity Context 外部调用此方法,则 Intent 必须包含Intent#FLAG_ACTIVITY_NEW_TASK启动标志。 这是因为,如果不从现有 Activity 启动,则没有现有任务可以放置新 Activity,因此需要将其放置在自己单独的任务中。

Android 开发者文档

更改checkWin()的签名以包含一个Context作为参数,然后在此处使用该Context

boolean checkWin(GameBoard gameboard, Context context){
   if(compareTabs(gameboard) == true){
       System.out.println("Win !");
       Intent i = new Intent(context, WinActivity.class);
       context.startActivity(i);
       return true;
   }
   else{
       return false;
   }
}

如果要调用checkWin()从一个Activity ,你可以提供this作为Context调用时,它的参数,因为Activity是一个Context

(inside an Activity)
boolean win = whatever.checkWin(gameboard, this);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM