case语句切换有意图

时间:2013-05-02 19:02:59

标签: java android switch-statement

我想知道是否有办法做到这一点,所以看起来会更好。我怎么能改变这个,所以我可以比较整数,或者有更简单的方法来做这个,所以我没有很多if语句或我应该尝试使用枚举来比较字符串?

public void onClick(View v) 
{
    Intent choiceIntent = getIntent();
    String msg = choiceIntent.getStringExtra("Choice1");

    if (msg.contentEquals("Option1"))
    {           
        if (v.getId() == R.id.button1)
        {           
            Intent intent1 = new Intent(this,Choice3.class);

            intent1.putExtra("Choice2", "Option3");
            startActivityForResult(intent1, 1);

            this.startActivity(intent1);    
        }
        else if (v.getId() == R.id.button2)
        {       
            Intent intent1 = new Intent(this,Choice3.class);

            intent1.putExtra("Choice2", "Option4");
            startActivityForResult(intent1, 1);

            this.startActivity(intent1);    
        }   
    }
    else if (msg.contentEquals("Option2"))
    {

        if (v.getId() == R.id.button1)
        {       

            Intent intent1 = new Intent(this,Choice3.class);

            intent1.putExtra("Choice2", "Option5");
            startActivityForResult(intent1, 1);

            this.startActivity(intent1);        
        }

        else if (v.getId() == R.id.button2)
        {
            Intent intent1 = new Intent(this,Choice3.class);

            intent1.putExtra("Choice2", "Option6");
            startActivityForResult(intent1, 1);

            this.startActivity(intent1);
        }   
    }
}

3 个答案:

答案 0 :(得分:1)

使用枚举。

intent1.putExtra("Choice1", yourEnum.OPTION_3);

要检索该值,请使用

choiceIntent.getSerializableExtra("Choice1");

这将允许您使用enum作为switch语句。

答案 1 :(得分:0)

看起来你的陈述之间唯一变化的是Intent的附加内容。我也不确定你为什么要同时startActivityForResult()startActivity(),但我会假设你知道。您可以通过执行以下操作来减少四重代码:

public void onClick(View v)  {
    Intent choiceIntent = getIntent();
    String msg = choiceIntent.getStringExtra("Choice1");
    Intent intent1 = new Intent(this,Choice3.class);

    if (...) {
        intent1.putExtra("Choice2", "Option3");
    }
    // Etc.

    startActivityForResult(intent1, 1);
    this.startActivity(intent1);
}

如果您真的想在某处使用开关,可以在v.getId()上进行切换,然后进行字符串比较。

答案 2 :(得分:0)

我不确定你要用你的代码实现什么,但我会使用更像的东西:

  1. 将Intent-extra键定义为需要理解它们的类中的常量字符串
  2. 对值使用常量int,也在需要理解它们的类中使用
  3. 这样

    1. 打字错误不会弄乱你的意图
    2. 您可以轻松使用switch语句
    3. 无需创建额外的枚举

      class MyClass {
          public static final String INTENT_KEY_CHOICE_1 = "Choice_1";
          public static final int INTENT_VALUE_OPTION_1 = 1;
          public static final int INTENT_VALUE_OPTION_2 = 2;
          .... 
          public void onClick(View v)  {
             int msg = getIntent().getIntExtra(INTENT_KEY_CHOICE_1);
             Intent intent1 = new Intent(this, Choice3.class);
             int intentExtra = INTENT_VALUE_OPTION_3;
             // you can change this easily to a switch statement
             if (msg == INTENT_VALUE_OPTION_1) {
                 intentExtra = v.getId() == R.id.button1 ? R.INTENT_VALUE_OPTION_3 : R.INTENT_VALUE_OPTION_4);
             } else if (msg == INTENT_VALUE_OPTION_2) {
                 intentExtra = v.getId() == R.id.button1 ? R.INTENT_VALUE_OPTION_4 : R.INTENT_VALUE_OPTION_5);
             }
             intent1.putExtra(INTENT_KEY_CHOICE_2, intentExtra);
             this.startActivity(intent1);
          }
      }
      
      class Choice3 {
          public static final String INTENT_KEY_CHOICE_2 = "Choice_2";
          public static final int INTENT_VALUE_OPTION_3 = 1;
          public static final int INTENT_VALUE_OPTION_4 = 2;
          public static final int INTENT_VALUE_OPTION_5 = 3;
          public static final int INTENT_VALUE_OPTION_5 = 4;
          ....
      }