我是Kotlin的初学者,以下代码来自网页,我无法理解代码this@MainActivity
中的参数layoutManager = LinearLayoutManager(this@MainActivity)
,你能告诉我吗?谢谢!
import android.os.Bundle
import android.support.v7.widget.LinearLayoutManager
import android.view.Menu
import android.view.MenuItem
import kotlinx.android.synthetic.main.activity_main.*
import mobi.porquenao.poc.kotlin.R
class MainActivity : BaseActivity() {
lateinit var listAdapter: MainAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
with (list) {
setHasFixedSize(true)
layoutManager = LinearLayoutManager(this@MainActivity)
listAdapter = MainAdapter()
adapter = listAdapter
}
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.main, menu)
return super.onCreateOptionsMenu(menu)
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
listAdapter.add()
list.smoothScrollToPosition(0)
return true
}
}
答案 0 :(得分:3)
this@MainActivity
引用当前的类上下文,类似于Java中的MainActivity.this
答案 1 :(得分:1)
this@MainActivity
是更好理解的背景:
Kotlin: Java:
this@MainActivity == MainActivity.this
答案 2 :(得分:1)
with(list)
更改该块中的所有内容,就好像我们在“list”是一个实例的类中一样。你可以在第一行看到:
setHasFixedSize(true)
这是一个必须在recyclerview上调用的方法,这不是MainActivity中存在的方法。现在,LayoutManager需要一个上下文。 MainActivity是一个上下文,因此我们将MainActivity传递给它。通常你会写'this'但是因为我们现在'在recyclerview'中感谢with语句,'this'将意味着'list'。因此 - > this@MainActivity
与java术语中的MainActivity.this
相同。
答案 3 :(得分:0)
这是类似于
的上下文layoutManager = LinearLayoutManager(this)
答案 4 :(得分:0)
用于引用外部范围。这意味着this
来自范围MainActivity
。
你可以在这里找到更多相关信息。 link for error log
此外,它还用于扩展功能。
假设你扩展了String对象。
fun String.Capitalize(){
//some logic here
this.@Capitalize // this references the receiver of Capitalize i.e any string
}
答案 5 :(得分:0)
合格 this
,用于从外部范围访问MainActivity
的上下文。
class MainActivity {
fun onCreate() {
val list = listOf(1, 2, 3)
with (list) {
println(this) // >>> [1, 2, 3]
println(this@MainActivity) // >>> MainActivity@2a84aee7
}
}
}
您可以在Kotlin documentation 中详细了解此方法。
答案 6 :(得分:0)
this@MainActivity
指向Current Class实例变量。
答案 7 :(得分:0)
Can get a reference to your MainActivity
by using
this@MainActivity