完成一个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);
}
谢谢!
答案 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);
}