【问题标题】:Android/Java - Pass Variables as Parameter to MethodsAndroid/Java - 将变量作为参数传递给方法
【发布时间】:2018-09-03 19:55:49
【问题描述】:

我发现自己在重复相同的代码行,我想稍微自动化一下。

我正在执行以下操作来更改视图中的文本颜色以对应正确/错误的答案:

((CheckBox) findViewById(R.id.quiz_answer_2e)).setTextColor(Color.parseColor("#EE7674"));

我想传入参数,所以我不必重复这个,我更愿意调用函数并为函数设置参数,例如:

public void setCorrect(String viewType, String viewName, String thisColor) {
    if (thisColor.equals("red")) {
        thisColor = "#EE7674";
    } else {
        thisColor = "#9DBF9E";
    }
    ((**viewType**) findViewById(R.id.**viewName**)).setTextColor(Color.parseColor(**thisColor**));
}

其中 viewTypeviewNamethisColor 被传递给方法。有没有办法做到这一点?

我尝试将值保存到字符串,但无法确定如何让该字符串从方法中运行。

提前致谢。

【问题讨论】:

    标签: java android methods parameter-passing


    【解决方案1】:

    我会根据以下内容重构您的方法:

    1. setTextColor(int color)TextView中定义,被EditTextCheckBoxButton等适用类继承。
    2. 虽然您可以通过其标识符(例如 This Question)获取资源,但您更有可能通过这种方式遇到运行时错误。因此,我建议将资源 ID 作为 int 传递
    3. 目前您有一个正确/错误(二元)颜色决定,因此请将参数设置为 boolean,并使用 correct 等自解释名称,并使用该信息来识别颜色资源。

    这将导致如下解决方案:

    public void setCorrect(int viewId, boolean correct) {
        int colorId = correct ? R.color.correct : R.color.incorrect;
        int color = ContextCompat.getColor(getApplicationContext(), colorId);
        ((TextView) findViewById(viewId)).setTextColor(color);
    }
    

    res/values 中的 colors.xml 看起来像这样:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <color name="correct">#9DBF9E</color>
        <color name="incorrect">#EE7674</color>
    </resources>
    

    【讨论】:

      猜你喜欢
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 2021-01-24
      • 2015-04-19
      相关资源
      最近更新 更多