所以,我有这个问答游戏,我有一堆弹出屏幕(错误的答案,游戏结束,时间到了等等)。我的游戏有15个级别,每个级别不同的问题数量,不同的时间等等。我希望当我完成第1级时,为弹出窗口提供一些信息,当用户单击“确定”时,我想加载下一级。我做了所有这些,除了在onActivityResult方法中搞砸了一些东西,它总是加载最后一个案例。这是我的代码:
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);
这是我在Popup类中所做的,按下OK按钮:
ok.setOnClickListener(new OnClickListener()
{
public void onClick(View paramAnonymousView)
{
Intent localIntent = new Intent();
setResult(RESULT_OK, localIntent);
finish();
}
});
这就是它开始变得怪异的地方,回到我的游戏类中(MY_REQUEST的第一件事就是错误的答案弹出窗口):
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == MY_REQUEST)
{
if(resultCode == RESULT_OK)
{
nextQuestion();
}
}
else
{
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();
break;
}
}
}
}
我不明白为什么,但它总是归结为案例3。
答案 0 :(得分:0)
首先改变这个:startActivityForResult(i,1);
到此:startActivityForResult(i,MY_REQUEST);
当你输入1时,它的意思是当你从下一个活动返回时它总是1。 您应该为每个案例使用不同的请求代码
您的代码应该是这样的: protected void onActivityResult(int requestCode,int resultCode,Intent data){ super.onActivityResult(requestCode,resultCode,data);
if(requestCode == MY_REQUEST){
if(resultCode == RESULT_OK){
nextQuestion();
}
}else{
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();
break;
}
}
}
}
如果你不打破,案件将转移到下一个案件,直到它结束或找到休息时间。
答案 1 :(得分:0)
你忘了把break语句放在每次控件来到最后一个case语句的原因上,你可以通过添加它来解决这个问题
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();
}
}
答案 2 :(得分:0)
您的StartActivity中的RequestCode硬编码为1! 这就是OnActivityResult()始终匹配1的原因。
startActivityForResult(i, 1);