2011-04-12 81 views
1


我在做简单的游戏。我有3个活动。第一个活动是主菜单(FirstActivity类)。
第一个活动下面的代码:如何更改android中的活动?

Intent i = new Intent(this, SecondActivity.class); 
startActivityForResult(i, ACTIVITY_CREATE); 

它调用第二个活动,其中,第二活动有以下代码:

setContentView(new MovementView(this)); 

MovementView类扩展SurfaceView。 MovementView类是我写所有游戏代码的地方。

所以我想让当生活== 0时,它改变为ThirdActivity。我怎么做?
我曾尝试把代码类似于FirstActivity的类,但它似乎并没有工作。
如果我把
((Activity)getContext()).finish();
它只是跳回到FirstActivity,但这不是我需要的,我需要它去到ThirdActivity类。

+1

“我曾尝试将代码类似于FirstActivity的类,但它似乎不起作用。” - 如果你放入ThirdActivity.class,它应该可以工作。你写了什么代码,什么“不起作用”呢?反而发生了什么? – 2011-04-12 16:01:38

+0

@Yoni Samlan,好,如果我把'Intent i = new Intent(this,ThirdActivity.class); startActivityForResult(i,ACTIVITY_CREATE);'它显示构造函数Intent(MovementView,Class )对于第一行是undefined_而对于第二行没有定义类型MovementView_的方法startActivityForResult(Intent,int)。 – randomUser56789 2011-04-12 16:07:19

+0

您似乎是从MovementView中调用新的Intent(this,GameOver.class),所以'this'是一个View不是上下文。您需要在构造函数中使用传递给MovementView的Activity。 – 2011-04-12 16:12:01

回答

2

最后,我可以回答,必须等待24小时。
所以,最后,我设法让工作的唯一的变体是这样的:
FirstActivity类:在点击

private void startGame() { 
     Intent i = new Intent(this, SecondActivity.class); 
     startActivity(i); 
    } 

SecondActivity类:

protected void onCreate(Bundle savedInstanceState) { 
setContentView(new MovementView(this)); 
}   
    @Override 
    protected void onDestroy() { 
     Intent i = new Intent(this, GameOver/*GameOver=ThirdActivity*/.class); 
     startActivity(i); 
     super.onDestroy(); 
    } 

MovementView类:

if (lives == 0){    
updateThread.setRunning(false); 
((Activity)getContext()).finish(); 
} 

我不知道是onDestroy和onStop之间的区别,但都工作。 唯一令人不快的事情是,当生命== 0时,它会返回到FirstActivity(半秒钟),然后才会返回到GameOver类。

1

既然你开始活性2..ForResult(),你也可以(你完成它之前setResult(GAME_OVER))设定次活动的结果,使活性1onActivityResult()开始Activity3,如果它是有道理的,活性2不再有,当Activity3结果显示...

RE: @Yoni Samlan,以及如果我把

Intent i = new Intent(this, ThirdActivity.class); 
startActivityForResult(i, ACTIVITY_CREATE); 

它显示构造意图(MovementView,班)为第一线未定义,和方法startActivityForResult(意向,INT)是未定义的类型MovementView对于第二行。

你应该通过你的Activity作为第一个参数,而不是视图,并调用Activity.startActivityForResult() ...... 所以通过你的Activity到您的视图,并描述使用它。

2

当您尝试使用它时无法正常工作,因为您尝试从视图而非活动创建一个意图。您需要使用视图的上下文(getContext())而不是this。除非实际计划使用结果,否则您还需要使用startActivity而不是startActivityForResult(但如果仅从自己的代码中使用它,将该上下文转换为活动应该相当安全)。

0

使用MovementView构造函数您必须记住该活动,tu使用它来启动第三个活动。

private Activity a; 

public MovementView(Acitivity a) { 
    this.a = a; 
    // your code 
} 

某处MovementView,更换

Intent i = new Intent(this, ThirdActivity.class); 

通过

Intent i = new Intent(a, ThirdActivity.class);