smoosh 4类似方法分为1种方法

时间:2014-01-24 09:32:21

标签: android

完成一个Android应用程序,我有四个方法,每个方法都与他们各自的按钮有关。每种都是一种颜色。如果按下一个,并且正确的颜色被告知被按下它会获得+点,否则它会得到一个点。

这些是我试图合并为一种的四种方法,虽然我很难搞清楚如果我这样做,那么我就没有办法分配负面分数。我想如果我喜欢蓝色,添加点,否则如果蓝绿色添加点等...但这种方法消除了如果他们被告知按蓝色和按下蓝绿色的事实,那么它将无法注册添加 - 点。

这是代码:

public void blue_pressed(View view) {
    correct = (TextView) findViewById(R.id.right);
    incorrect = (TextView) findViewById(R.id.wrong);
    if (count != 0 && !(count >NUMBER_ROUNDS) && color == blue) {
        cor++;
        correct.setText(getString(R.string.num_cor, cor));
    } else {
        inc++;
        incorrect.setText(getString(R.string.num_inc, inc));
    }
    start_pressed(view);
}

public void teal_pressed(View view) {
    correct = (TextView) findViewById(R.id.right);
    incorrect = (TextView) findViewById(R.id.wrong);
    if (count != 0 && !(count > NUMBER_ROUNDS) && color == teal) {
        cor++;
        correct.setText(getString(R.string.num_cor, cor));
    } else {
        inc++;
        incorrect.setText(getString(R.string.num_inc, inc));
    }
    start_pressed(view);
}

public void purp_pressed(View view) {
    correct = (TextView) findViewById(R.id.right);
    incorrect = (TextView) findViewById(R.id.wrong);
    if (count != 0 && !(count > NUMBER_ROUNDS) && color == purp) {
        cor++;
        correct.setText(getString(R.string.num_cor, cor));
    } else {
        inc++;
        incorrect.setText(getString(R.string.num_inc, inc));
    }
    start_pressed(view);
}


public void pink_pressed(View view) {
    correct = (TextView) findViewById(R.id.right);
    incorrect = (TextView) findViewById(R.id.wrong);
    if (count != 0 && !(count > NUMBER_ROUNDS) && color == pink) {
        cor++;
        correct.setText(getString(R.string.num_cor, cor));
    } else {
        inc++;
        incorrect.setText(getString(R.string.num_inc, inc));
    }
    start_pressed(view);
}

谢谢!

1 个答案:

答案 0 :(得分:0)

这个问题更多的是关于重构而不是Android。

您有4种方法仅与if语句中的颜色不同。这意味着如果您将颜色作为参数传递,则只需要一个方法,并且仅保留该方法。但你不能改变“onClick”方法的签名,那么该怎么办?您创建了一个额外的私有帮助方法,您可以在所有四个“onClick”方法中调用它。

在Eclipse中,您可以轻松地提取其中一个“onClick”方法的主体,并将其重构为您的帮助方法。输入快捷方式:alt + command + M.然后手动更改提取方法的签名,以包含一个int参数来比较color。最后你得到......

private void buttonPressed(View view, int col){
    correct = (TextView) findViewById(R.id.right);
    incorrect = (TextView) findViewById(R.id.wrong);
    if (count != 0 && !(count >NUMBER_ROUNDS) && color == col) {
        cor++;
        correct.setText(getString(R.string.num_cor, cor));
    } else {
        inc++;
        incorrect.setText(getString(R.string.num_inc, inc));
    }
    start_pressed(view);
}

public void blue_pressed(View view) {
    buttonPressed(view, blue);
}

public void teal_pressed(View view) {
    buttonPressed(view, teal);
}

public void purp_pressed(View view) {
    buttonPressed(view, purp);
}

public void pink_pressed(View view) {
    buttonPressed(view, pink);
}