Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.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
如何改变android中的活动?_Android_Android Activity - Fatal编程技术网

如何改变android中的活动?

如何改变android中的活动?,android,android-activity,Android,Android Activity,我正在做一个简单的游戏。我有三项活动。第一个活动是主菜单(第一个活动类)。 第一个活动具有以下代码: Intent i = new Intent(this, SecondActivity.class); startActivityForResult(i, ACTIVITY_CREATE); setContentView(new MovementView(this)); 它调用第二个活动,其中第二个活动具有以下代码: Intent i = new Intent(this, SecondAc


我正在做一个简单的游戏。我有三项活动。第一个活动是主菜单(第一个活动类)。
第一个活动具有以下代码:

Intent i = new Intent(this, SecondActivity.class);  
startActivityForResult(i, ACTIVITY_CREATE);
setContentView(new MovementView(this));
它调用第二个活动,其中第二个活动具有以下代码:

Intent i = new Intent(this, SecondActivity.class);  
startActivityForResult(i, ACTIVITY_CREATE);
setContentView(new MovementView(this));
MovementView类扩展了SurfaceView。MovementView类是我编写所有游戏代码的地方

所以我想当lives==0时,它变为第三个。我该怎么做?

我尝试过将代码与FirstActivity的类相似,但似乎不起作用。
如果我把
((活动)getContext()).finish()

它只是跳回第一个活动,但这不是我需要的,我需要它去第三个活动课。

因为你用
开始活动2。ForResult()
,你也可以在完成之前用
设置结果(游戏结束)
设置第二个活动的结果因此,Activity1
onActivityResult()
中启动Activity3,前提是当显示Activity3时,Activity2不再存在

RE:@Yoni Samlan,如果我把

Intent i = new Intent(this, ThirdActivity.class);
startActivityForResult(i, ACTIVITY_CREATE);
它显示第一行的构造函数Intent(MovementView,Class)未定义,第二行的MovementView类型的方法startActivityForResult(Intent,int)未定义

您应该将
Activity
作为第一个参数而不是视图传递,并调用
Activity.startActivityForResult()
。。。
因此,请将您的
活动
传递给您的视图,并按说明在视图中使用它。

因为您使用
启动活动2。对于result()
,您还可以设置第二个活动的结果(在完成之前使用
设置结果(游戏结束)
)因此,Activity1
onActivityResult()
中启动Activity3,前提是当显示Activity3时,Activity2不再存在

RE:@Yoni Samlan,如果我把

Intent i = new Intent(this, ThirdActivity.class);
startActivityForResult(i, ACTIVITY_CREATE);
它显示第一行的构造函数Intent(MovementView,Class)未定义,第二行的MovementView类型的方法startActivityForResult(Intent,int)未定义

您应该将
Activity
作为第一个参数而不是视图传递,并调用
Activity.startActivityForResult()
。。。
因此,请将您的
活动
传递给您的视图,并按说明在视图中使用它。

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

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

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

private Activity a;

public MovementView(Acitivity a) {
  this.a = a;
  // your code
}
在MovementView中的某个位置,替换

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


使用MovementView构造函数,您必须记住活动,然后使用它启动第三个活动

private Activity a;

public MovementView(Acitivity a) {
  this.a = a;
  // your code
}
在MovementView中的某个位置,替换

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


我终于可以回答了,不得不等24小时。
因此,最终,我成功实现的唯一变体如下:
第一个活动类:
点击

private void startGame() {
        Intent i = new Intent(this, SecondActivity.class);
        startActivity(i);
    }
第二类活动:

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之间的区别,但两者都有效。
唯一令人不快的是,当lives==0时,它返回到FirstActivity(大约半秒),然后返回GameOver类。

最后我可以回答,不得不等待24小时。
因此,最终,我成功实现的唯一变体如下:
第一个活动类:
点击

private void startGame() {
        Intent i = new Intent(this, SecondActivity.class);
        startActivity(i);
    }
第二类活动:

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之间的区别,但两者都有效。
唯一令人不快的是,当lives==0时,它会返回到FirstActivity(大约半秒),然后返回到GameOver类。

“我尝试过将代码放在类似FirstActivity的类中,但似乎不起作用。”--如果放在ThirdActivity.class中,它应该会起作用。你写了什么代码,什么“不起作用”?发生了什么事?@Yoni Samlan,如果我把
Intent I=newintent(this,ThirdActivity.class);startActivityForResult(i,活动\创建)它显示第一行的构造函数意图(MovementView,Class)未定义,第二行的类型MovementView的方法startActivityForResult(Intent,int)未定义。您似乎是从MovementView中调用新的意图(this,GameOver.Class),因此“this”是一个视图而不是上下文。您需要在构造函数中使用传递给MovementView的活动。“我尝试过将代码放在类似FirstActivity的类中,但似乎不起作用。”--如果放在ThirdActivity.class中,它应该会起作用。你写了什么代码,什么“不起作用”?发生了什么事?@Yoni Samlan,如果我把
Intent I=newintent(this,ThirdActivity.class);startActivityForResult(i,活动\创建)它显示第一行的构造函数意图(MovementView,Class)未定义,第二行的类型MovementView的方法startActivityForResult(Intent,int)未定义。您似乎正在调用新的意图(此,GameO