A
206. 反转链表
描述: 反转一个单链表。
思路: 遍历一遍列表,使用临时变量保存前一个节点即可。
R
Stop Using Post/PostDelayed in Your Android Views
文章建议不要在操作 View 的时候使用 Post/PostDelayed 方法。因为可能等到方法执行的时候,View 已经空了,容易引发 NullPointerException 崩溃。
myView.postDelayed({
myView.animateSomething()
}, delay)
如果真的要使用 Post/PostDelayed ,应该通过 Runnable 的方式调用,并在合适的时机移除。
private val animateRunnable = Runnable {
myView.animateSomething()
}
myView.postDelayed(animateRunnable, delay)
// Somewhere in your code
myView.removeCallback(animateRunnable)
如果只是想等到 View 准备好后执行某些操作,可以使用以下2个方法。
- OnPreDrawListener 。
measure之后,layout之前调用。 - OnGlobalLayoutListener 。视图发生变化即会被触发。
myView.viewTreeObserver.addOnPreDrawListener(object : ViewTreeObserver.OnPreDrawListener {
override fun onPreDraw(): Boolean {
myView.animateSomething()
myView.viewTreeObserver.removeOnPreDrawListener(this)
return true
}
})
myView.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onPreDraw(): Boolean {
myView.animateSomething()
myView.viewTreeObserver.removeOnGlobalLayoutListener(this)
}
})
但在使用这2种方法的时候,也需要注意及时移除 listener ,否则可能造成内存泄漏。
更好的做法是使用 KTX extensions ,可以简化代码,并省去移除步骤。
myView.doOnPreDraw {
myView.animateSomething()
}
myView.doOnLayout {
myView.animateSomething()
}
T
Python 交换变量值的简化写法。
a, b = b, a
S
暂无