ARTS - 13

285 阅读1分钟

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个方法。

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


暂无