背景
最近的项目采用Kt编写的,回顾一下kotlin的知识点。
其中和java最特别的几个使用是需要重点学习回顾的:let,run,with,apply,also
等等。
回顾
重点就是上图所描述的,其中的差别主要是 参考
代码
- let
// 判断中文环境 - it的方式
protected fun isChinese():Boolean
{
mLocale?.let {
if(it != Locale.CHINA && it != Locale.CHINESE)
{
return false
}
}
return true
}
- apply
// 返回this 即本对象
dialog?.apply {
setCanceledOnTouchOutside(canceledOnTouchOutside())
setCancelable(cancelable())
}
- run
//返回的 this 对象
mListener?.run {
ivMic.setOnClickListener {
this.onMicClick(classUser)
}
ivCamera.setOnClickListener {
this.onCameraClick(classUser)
}
ivShare.setOnClickListener {
this.onShareClick(classUser)
}
}
- with
//包裹该对象,调用该对象的方法
with(container) {
setChildCountChangedListener { count: Int ->
if (count == 0) {
main_top_whiteboard_name.visibility = View.GONE
main_top_page_layout.visibility = View.GONE
main_top_sheet_name.visibility = View.GONE
main_step_layout.visibility = View.GONE
main_top_layout.setBackgroundColor(Color.parseColor("#f4f5f8"))
currentHolder = null
} else {
main_top_layout.setBackgroundColor(Color.TRANSPARENT)
}
}
setWhiteboardSelectListener {
Logger.i(TAG, "container onWhiteboardSelectListener,${it}")
val holder = container.getWhiteboardViewHolder(it)!!
onWhiteboardHolderSelected(holder)
updatePreviewRelations()
updateToolsVisibility()
}
setWhiteboardScrollListener { currentPage: Int, pageCount: Int ->
Logger.i(
TAG,
"setWhiteboardScrollListener(),currentPage:${currentPage},pageCount:${pageCount}, ${currentHolder?.getCurrentPage()}"
)
main_page_index.text = "%s/%s".format(currentPage.toString(), pageCount.toString())
docs_preview_list.setSelectedPage(currentPage - 1)
}
setWhiteboardClickedListener {
val isVisible = layout_top_bar.visibility == View.VISIBLE
layout_top_bar.visibility = if (isVisible) View.GONE else View.VISIBLE
if (!isVisible) {
handler.removeCallbacks(hideTopBarRunnable)
handler.postDelayed(hideTopBarRunnable, 5000)
}
}
}
- also
// it 对象,
val selectRolePopWindow =
SelectRolePopWindow(this, join_role.text.toString())
.also {
it.setOnConfirmClickListener { str ->
join_role.text = str
}