0

我想知道是否有办法做到这一点,这样看起来会更好。我该如何改变它,以便我可以比较整数,或者有更简单的方法来做到这一点,所以我没有很多 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);
        }   
    }
}
4

3 回答 3

1

使用枚举。

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

并检索值,使用

choiceIntent.getSerializableExtra("Choice1");

这将允许您将 enum 用于您的 switch 语句。

于 2013-05-02T19:10:03.903 回答
0

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

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

这边走

  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;
        ....
    }
    
于 2013-05-02T19:59:36.643 回答
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()然后进行字符串比较。

于 2013-05-02T19:12:06.443 回答