Java OnActivity结果无法正常工作
所以,我有一个问答游戏,我有一堆弹出屏幕(用于回答错误、游戏结束、时间到了等等)。我的游戏有15个关卡,每个关卡有不同数量的问题,不同的时间等等。例如,当我完成第1级时,我想在弹出窗口中显示一些信息,当用户单击OK时,我想加载下一级。我做了所有这些,除了在onActivityResult方法中出现了一些问题,它总是加载最后一个案例。这是我的密码:Java OnActivity结果无法正常工作,java,android,android-activity,Java,Android,Android Activity,所以,我有一个问答游戏,我有一堆弹出屏幕(用于回答错误、游戏结束、时间到了等等)。我的游戏有15个关卡,每个关卡有不同数量的问题,不同的时间等等。例如,当我完成第1级时,我想在弹出窗口中显示一些信息,当用户单击OK时,我想加载下一级。我做了所有这些,除了在onActivityResult方法中出现了一些问题,它总是加载最后一个案例。这是我的密码: static final int MY_REQUEST = 0; Intent i = new Intent(this, Popup_nivoi.c
static final int MY_REQUEST = 0;
Intent i = new Intent(this, Popup_nivoi.class);
nivo++;
nivoKraj++;
switch(nivo)
{
case 2:
{
brojPitanja = 11;
greska = 4;
mogucnostPreskakanjaPitanja = 2;
i.putExtra("brojPitanja", brojPitanja);
i.putExtra("vreme", 100);
i.putExtra("pravoNaGreske", greska);
i.putExtra("nivo", nivo);
i.putExtra("mogucnostPreskakanja", mogucnostPreskakanjaPitanja);
break;
}
case 3:
{
brojPitanja = 12;
greska = 4;
mogucnostPreskakanjaPitanja = 2;
i.putExtra("brojPitanja", brojPitanja);
i.putExtra("vreme", 95);
i.putExtra("pravoNaGreske", greska);
i.putExtra("nivo", nivo);
i.putExtra("mogucnostPreskakanja", mogucnostPreskakanjaPitanja);
break;
}
case 4:
{
brojPitanja = 13;
greska = 3;
mogucnostPreskakanjaPitanja = 2;
i.putExtra("brojPitanja", brojPitanja);
i.putExtra("vreme", 90);
i.putExtra("pravoNaGreske", greska);
i.putExtra("nivo", nivo);
i.putExtra("mogucnostPreskakanja", mogucnostPreskakanjaPitanja);
break;
}
.
.
.
.
case 15:
{
brojPitanja = 23;
greska = 0;
mogucnostPreskakanjaPitanja = 0;
i.putExtra("brojPitanja", brojPitanja);
i.putExtra("vreme", 35);
i.putExtra("pravoNaGreske", greska);
i.putExtra("nivo", nivo);
i.putExtra("mogucnostPreskakanja", mogucnostPreskakanjaPitanja);
break;
}
case 16:
{
Intent iFinale = new Intent(this, Finale.class);
startActivityForResult(iFinale, 6);
break;
}
}
cancelAllTimers();
startActivityForResult(i, MY_REQUEST);
这是我在弹出类中所做的,按下OK按钮:
ok.setOnClickListener(new OnClickListener()
{
public void onClick(View paramAnonymousView)
{
Intent localIntent = new Intent();
setResult(RESULT_OK, localIntent);
finish();
}
});
在我的游戏课上,这就是它开始变得奇怪的地方(我的_请求的第一件事是错误的答案弹出窗口):
我不明白为什么,但它总是出现在案例3中。首先改变这个:startActivityForResult(I,1) 对此:startActivityForResult(我,我的请求) 当你输入1时,意味着当你从下一个活动返回时,它将始终为1。 您应该为每个案例使用不同的请求代码 您的代码应该如下所示: 受保护的void onActivityResult(int请求代码、int结果代码、意图数据){ super.onActivityResult(请求代码、结果代码、数据)
如果不中断,案例将移动到下一个案例,直到结束或找到中断。您忘记放置中断语句,这就是为什么每次控制都会出现在最后一个案例语句中,您可以通过添加它来修复此问题
switch(requestCode) {
case 0:
if(resultCode == RESULT_OK) {
nextQuestion();
timer.start();
}
break;
case 1:
if(resultCode == RESULT_OK) {
nextQuestion();
timer1.start();
}
break;
case 2:
if(resultCode == RESULT_OK) {
nextQuestion();
timer2.start();
}
break;
case 3:
if(resultCode == RESULT_OK) {
nextQuestion();
timer3.start();
}
}
您的StartActivity中将RequestCode硬编码为1!! 这就是OnActivityResult()始终匹配1的原因
startActivityForResult(i, 1);
但是当我尝试我的_请求而不是1时,我只会一个接一个地获得弹出窗口,下一级不会加载。是的,我可以看到您的问题。其工作方式是startActivityForResult()的第二个参数是活动完成时返回的值,并传递到onActivityResult()中方法。我可以从您最初设置MY_REQUEST=0的代码中看出,但您从未将其设置为任何其他值。因此,基本上任何活动都将传回一个0的请求代码。在启动活动之前,您需要将其设置为适当的值。您编写了案例2:if(){break;},但应该是案例2:if(){}break;
switch(requestCode) {
case 0:
if(resultCode == RESULT_OK) {
nextQuestion();
timer.start();
}
break;
case 1:
if(resultCode == RESULT_OK) {
nextQuestion();
timer1.start();
}
break;
case 2:
if(resultCode == RESULT_OK) {
nextQuestion();
timer2.start();
}
break;
case 3:
if(resultCode == RESULT_OK) {
nextQuestion();
timer3.start();
}
}
startActivityForResult(i, 1);