@ MainActivity的代码是什么意思?

时间:2017-08-04 09:03:37

标签: android kotlin

我是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
    }

}

8 个答案:

答案 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