这个@ MainActivity的代码是什么意思?
我是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 } }
this@MainActivity
引用当前的类上下文,类似于Java中的MainActivity.this
with(list)
改变该块中的所有内容,就好像我们在“list”是一个实例的类中一样。 你可以看到,在第一行:
setHasFixedSize(true)
这是一个必须在recyclerview上调用的方法,这不是MainActivity中存在的方法。 现在,LayoutManager需要一个上下文。 MainActivity是一个上下文,所以我们把MainActivity传递给它。 通常情况下,你只需要写'这个',但是因为我们现在'正在回收查看',这要归功于with语句,'this'就是'list'。 因此 – > this@MainActivity
这是相同的MainActivity.this
在Java条款。
这是类似的情况
layoutManager = LinearLayoutManager(this)
this@MainActivity
是更好理解的上下文:
Kotlin: Java: this@MainActivity == MainActivity.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 文档中阅读有关此方法的更多信息。
它被用来引用一个外部的范围。 这意味着this
是来自MainActivity
的范围。 你可以在这里找到更多的信息。 这个表达式
此外,它用于扩展功能。
假设你扩展了String对象。
fun String.Capitalize(){ //some logic here this.@Capitalize // this references the receiver of Capitalize ie any string }
this@MainActivity
指向当前类实例变量。
通过使用可以获得对MainActivity
的引用
this@MainActivity