2016-04-24 13 views
17

In diversi esempi di Kotlin per Android vedo toast ("Some message ...") o toastLong ("Some long message"). Ad esempio:Kotlin per Android. Toast

view.setOnClickListener { toast("Click") } 

Come ho capito è una funzione di estensione per attività.

Come definire questa funzione di toast() e dove (in quale luogo) essere in grado di utilizzarlo attraverso il progetto?

risposta

29

può essere una funzione di estensione per Context:

fun Context.toast(message: CharSequence) = 
    Toast.makeText(this, message, Toast.LENGTH_SHORT).show() 

è possibile inserire questo ovunque nel progetto, dove esattamente è a voi. Ad esempio, è possibile definire un file mypackage.util.ContextExtensions.kt e inserirlo come una funzione di livello superiore.

Ogni volta che si ha accesso a un'istanza Context, è possibile importare questa funzione e usarlo:

import mypackage.util.ContextExtensions.toast 

fun myFun(context: Context) { 
    context.toast("Hello world!") 
} 
1

E 'semplicemente una funzione di estensione per Context (come gli altri già sottolineato).

È possibile trovare un sacco di funzioni di estensione Android predefinite in Anko, che è probabilmente ciò che molte delle esercitazioni utilizzano anche.

17

In realtà è una parte di Anko, un'estensione per Kotlin. La sintassi è la seguente:

toast("Hi there!") 
toast(R.string.message) 
longToast("Wow, such a duration") 

Nella tua app-livello di build.gradle, aggiungere compile "org.jetbrains.anko:anko-common:0.8.3"

Aggiungi import org.jetbrains.anko.toast alla vostra attività.

1

solo per aggiungere alla risposta di @ nhaarman -> probabilmente si desidera aggiungere il supporto resourceId così

fun Context.toast(resourceId: Int) = toast(getString(resourceId)) 
fun Context.toast(message: CharSequence) = 
    Toast.makeText(this, message, Toast.LENGTH_SHORT).show() 
3

Per tasto di scatto o qualsiasi altro metodo annidato, fare questo:

Toast.makeText([email protected], "Its toast!", Toast.LENGTH_SHORT).show(); 
0

Durante l'utilizzo Anko con Kotlin, all'interno frammento utilizzare:

  • activity.toast (" messaggio stringa ") o
  • context.toast (" string message ")