onActivityResult无法正常工作

时间:2014-04-24 13:47:35

标签: java android android-activity

所以,我有这个问答游戏,我有一堆弹出屏幕(错误的答案,游戏结束,时间到了等等)。我的游戏有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。

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);