Android smoosh将4种类似方法合并为1种方法

Android smoosh将4种类似方法合并为1种方法,android,Android,完成一个android应用程序后,我有四种方法,每种方法都与各自的按钮有关。每个都是一种颜色。如果一个被按下,它的正确颜色被告知被按下,它会得到一个+点,否则它会得到一个-点 这是我试图结合成一个的4种方法,尽管我很难弄清楚,如果我这样做了,那么我就没有办法分配否定点。我在想,如果我真的喜欢如果蓝色,加上点,否则如果蓝绿色加上点等等。。。但这种方法忽略了这样一个事实,即如果他们被告知按下蓝色键并按下蓝色键,那么他们就不会注册添加一个点 代码如下: public void blue_pressed

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

这是我试图结合成一个的4种方法,尽管我很难弄清楚,如果我这样做了,那么我就没有办法分配否定点。我在想,如果我真的喜欢如果蓝色,加上点,否则如果蓝绿色加上点等等。。。但这种方法忽略了这样一个事实,即如果他们被告知按下蓝色键并按下蓝色键,那么他们就不会注册添加一个点

代码如下:

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

谢谢

这个问题实际上更多的是关于重构,而不是Android

您有4种方法,它们仅在if语句中的颜色方面有所不同。这意味着,如果您将颜色作为参数传递,那么您将只有一个方法,并且只保留该方法。但是您不能更改onClick方法的签名,那么该怎么办呢?创建一个额外的私有助手方法,在所有四个onClick方法中调用该方法

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

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

更好的是,从按钮本身找出颜色。它可以是switch view.getId{case R.id.blue_button:color=blue;…或者哪一个更好-使用tag color=view.getTag并将每个按钮的标记设置为所需的颜色。我不会这样做。使用切换方法时,您需要维护切换,因此如果您添加了新颜色,您必须记住检查您的助手方法并在那里添加颜色。在我的方法中,如果添加新颜色您添加了一个带有显式参数的新onClick方法,因此您会意识到您必须在那里设置正确的颜色。此外,您可以将标记设置为xml中的字符串,但随后需要对其进行解析。或者您可以从代码中进行设置。无论哪种方式,它看起来都像messiercool awesome@Gil,不像现在的5个方法那样理想,但却大胆地进行了缩减这样的代码足够好了:!@erp好吧,真正的优势是,如果你修改按钮逻辑中的某些内容,你只需要修改一个地方。从长远来看,这比多使用一种方法会有更多的回报;再次感谢,当你的新用户开始使用某些内容时,很高兴有帮助的人!