1 回答

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊
我剛剛嘗試過這個(gè):
val foo = mapOf("a" to "Red")
someView.setBackgroundColor(Color.parseColor(foo["a"]))
它工作正常,您能分享有關(guān)異常的更多詳細(xì)信息嗎?
更新
我嘗試完全按照所寫的方式使用您的內(nèi)容,只是我替換了byMyClass的值而不是您的字符串。aRedb
你使用parseColor正確嗎?
/**
* </p>Parse the color string, and return the corresponding color-int.
* If the string cannot be parsed, throws an IllegalArgumentException
* exception. Supported formats are:</p>
*
* <ul>
* <li><code>#RRGGBB</code></li>
* <li><code>#AARRGGBB</code></li>
* </ul>
*
* <p>The following names are also accepted: <code>red</code>, <code>blue</code>,
* <code>green</code>, <code>black</code>, <code>white</code>, <code>gray</code>,
* <code>cyan</code>, <code>magenta</code>, <code>yellow</code>, <code>lightgray</code>,
* <code>darkgray</code>, <code>grey</code>, <code>lightgrey</code>, <code>darkgrey</code>,
* <code>aqua</code>, <code>fuchsia</code>, <code>lime</code>, <code>maroon</code>,
* <code>navy</code>, <code>olive</code>, <code>purple</code>, <code>silver</code>,
* and <code>teal</code>.</p>
*/
@ColorInt
public static int parseColor(@Size(min=1) String colorString) {
if (colorString.charAt(0) == '#') {
// Use a long to avoid rollovers on #ffXXXXXX
long color = Long.parseLong(colorString.substring(1), 16);
if (colorString.length() == 7) {
// Set the alpha value
color |= 0x00000000ff000000;
} else if (colorString.length() != 9) {
throw new IllegalArgumentException("Unknown color");
}
return (int)color;
} else {
Integer color = sColorNameMap.get(colorString.toLowerCase(Locale.ROOT));
if (color != null) {
return color;
}
}
throw new IllegalArgumentException("Unknown color");
}
更新2:
好吧,你說“一個(gè)擴(kuò)展的類RecyclerView.ViewHolder”,但所說的類只是 RecyclerView 類中的一個(gè)抽象類,所以它沒有setBackgroundColor,除非你正在做類似的事情:
yourViewHolderInstance.itemView.setBackgroundColor.
那么你的 setBackgroundColor 的簽名是什么?
看起來像嗎public void setBackgroundColor(@ColorInt int color) {?
我只是為了好玩才將其添加到我的應(yīng)用程序中:
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
(holder as BaseViewHolder).bind(getItem(position))
// For Filippo :)
holder.itemView.setBackgroundColor(Color.parseColor(MyClass.foo["a"]))
}
嗯……現(xiàn)在一切看起來都很紅。:)
更新3
好的,根據(jù)您的最新更新,您是從 Java 調(diào)用此函數(shù),因此您不能使用 Kotlin 語法...
做這個(gè):
final Map<String, String> foo = MyClass.foo;
yourView.setBackgroundColor(Color.parseColor(foo.get("a")));
顯然,您可以避免中間分配并進(jìn)行:
v.setBackgroundColor(Color.parseColor(MyClass.foo.get("a")));
我通常更喜歡前者,特別是如果您給它所有有意義的名稱并且需要調(diào)試,但就我而言,沒有真正的區(qū)別。
添加回答
舉報(bào)