Kotlin for Android.烤面包

And*_*rey 57 android kotlin

在Android的不同Kotlin示例中,我看到toast("Some message ...")或toastLong("Some long message").例如:

view.setOnClickListener { toast("Click") }
Run Code Online (Sandbox Code Playgroud)

据我所知,它是一个活动的扩展功能.

如何定义这个toast()函数以及在哪里(在什么地方)能够通过项目使用它?

nha*_*man 93

它可以是一个扩展功能Context:

fun Context.toast(message: CharSequence) = 
    Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
Run Code Online (Sandbox Code Playgroud)

您可以将它放在项目的任何位置,这取决于您.例如,您可以定义一个文件mypackage.util.ContextExtensions.kt并将其作为顶级函数放在那里.

只要您有权访问Context实例,就可以导入此函数并使用它:

import mypackage.util.ContextExtensions.toast

fun myFun(context: Context) {
    context.toast("Hello world!")
}
Run Code Online (Sandbox Code Playgroud)


Zee*_*ro0 43

这是Kotlin的一线解决方案:

Toast.makeText(this@MainActivity, "Its toast!", Toast.LENGTH_SHORT).show()
Run Code Online (Sandbox Code Playgroud)

  • Thx @Zeero0 ,`this@MainActivity` +1。 (5认同)
  • requireContext() 是 Fragment 或 Activity 的一部分 (2认同)

Muz*_*Muz 42

它实际上是Anko的一部分,是Kotlin的延伸.语法如下:

toast("Hi there!")
toast(R.string.message)
longToast("Wow, such a duration")
Run Code Online (Sandbox Code Playgroud)

在您的应用级别中build.gradle,添加implementation "org.jetbrains.anko:anko-common:0.8.3"

添加import org.jetbrains.anko.toast到您的活动中.

  • 很久以前,Kotlin 还没有得到 Google 的正式支持。Anko 似乎是一个未完成的项目。目标是完全替换 XML 的布局,但他们在这方面做得并不好。Anko 的很多好处也逐渐内置到 Kotlin 中。 (2认同)

bal*_*ala 6

尝试这个

活动中

Toast.makeText(applicationContext, "Test", Toast.LENGTH_LONG).show()
Run Code Online (Sandbox Code Playgroud)

要么

Toast.makeText(this@MainActiivty, "Test", Toast.LENGTH_LONG).show()
Run Code Online (Sandbox Code Playgroud)

片段中

Toast.makeText(activity, "Test", Toast.LENGTH_LONG).show()
Run Code Online (Sandbox Code Playgroud)

要么

Toast.makeText(activity?.applicationContext, "Test", Toast.LENGTH_LONG).show()
Run Code Online (Sandbox Code Playgroud)


Azi*_*ziz 5

如果您不想使用anko并想创建自己的Toast扩展。您可以创建在 kotlin 文件(没有类)中定义的内联(或不内联)扩展,并且您可以在任何类中访问此函数。

inline fun Context.toast(message:String){
   Toast.makeText(this, message , duration).show()
}
Run Code Online (Sandbox Code Playgroud)

用法:

在活动中,

toast("Toast Message")
Run Code Online (Sandbox Code Playgroud)

在片段中,

context?.toast("Toast Message")
Run Code Online (Sandbox Code Playgroud)