这是用kotlin编写的,但我敢肯定在Java中几乎相同。
something.setOnClickListener {
availableReportRecycler.isActivated = !availableReportRecycler.isActivated
if (availableReportRecycler.isActivated) availableReportRecycler.visibility = View.VISIBLE
else availableReportRecycler.visibility = View.GONE
}
kotlin/java中有没有办法简化此代码?
我觉得它应该能够将其简化为(伪代码(之类的东西:
something.setOnClickListener {
availableReportRecycler.visibility =
{availableReportRecycler.isActivated = !self} ? View.VISIBLE:View.GONE
}
在没有在网上找到任何相关的东西后,我很强迫各种组合,但仍然无法正常工作。
你能做到多么美丽?最好的答案获得了虚拟啤酒和"我好的"贴纸!
所呈现的代码的主要部分远非如此漂亮,这是长availableReportRecycler
名称的重复。将Kotlin标准库中的范围范围with
与导入和if
表达式组合,使我们可以使此代码更加干净,而无需使其更难理解:
something.setOnClickListener {
with (availableReportRecycler) {
isActivated = !isActivated
visibility = if (isActivated) VISIBLE else GONE
}
}
您可以像also
一样应用进一步的范围范围,以避免在第二个语句中重复isActivated
,但是,对于我的口味,它不会使此特定代码更好。
我认为罗马·伊丽莎白(Roman Elizarov(有一个很好的方法。但是,如果您想链接激活和可见性您可能需要考虑这样的setActivated
:
class AvailableReportRecycler(context: Context) : View(context) {
override fun setActivated(value : Boolean) {
super.setActivated(value)
visibility = if(value) View.VISIBLE else View.GONE
}
}
这样,您将可见性链接到激活状态。您可以这样称呼它:
something.setOnClickListener {
availableReportRecycler.isActivated = !availableReportRecycler.isActivated
}
对象 - 对象 - 不是很漂亮吗?:(