2017-11-26 16 views
1

私はViewと1つのCircleShapeを持っています。これはこのビューでトーストを表示するはずです。そして私は主なアクティビティでそれを使用します。 これは、私の見解でCircleShape(それは私のXMLで表示している)とリスナーである私はKotlinでコールバックを使用できますか?

interface OnClickListenerInterface { 
    fun onClick() 
} 

私のインタフェースです。私は自分のアクティビティにOnClickを実装したいと思います。

私が知っている
var listener: OnClickListenerInterface? = null 

mCircleShape.setOnClickListener(View.OnClickListener { 
     if (listener == null) [email protected] 
     listener!!.onClick() 
    }) 

、Kotlinゲッターとセッターでの一般的なオートマチックでなく、どのようにそれがプライベート場合、私は、リスナーを設定することができます。 Kotlinにコールバック、onClickListenereを使用するためにどのように私がすべきことは、私の活動からのコードですが、それは

CircleShape.listener = object :OnClickListenerInterface{ 
     override fun onClick() { 
     ToastUtils.showSuccessMessage(getContext(),"pressed") 
     } 
    } 

動作しませんか?あなたは、このコードを削除するために必要なすべての

+0

「これは機能しません」 - エラーは何ですか? – Moira

+0

リスナーがアクティブではありません –

答えて

0

まず:

mCircleShape.setOnClickListener(View.OnClickListener { 
     if (listener == null) [email protected] 
     listener!!.onClick() 
    }) 

リスナーは常に最初にnullで、あなたのコードだけで、常に返すため。

var listener: OnClickListenerInterface? = nullは既に公開されています(これはKotlinのデフォルトのアクセスレベルです)。したがって、必要に応じて、アクティビティに設定することができます。 listener?.onClick()コールを使用してCircleShapeから呼び出します。

0

ラムダ式を使用しようとしていますか?たとえば、あなたの場合:

mCircleShape.setOnClickListener( 
    { _ -> ToastUtils.showSuccessMessage(context,"pressed") } 
) 

それともあなたはそれをよりkotlinスタイルにしたい場合:CircleShape.ktオン

mCircleShape.listener = ( 
    { _ -> ToastUtils.showSuccessMessage(context,"pressed") } 
) 
0

あなたの活動に
private listener OnClickListenerInterface? = null 
... 
fun setOnClickListener(listener: OnClickListenerInterface){ 
    this.listener = listener 
} 

mCircleShape.setOnClickListener(object: CircleShape.OnClickListenerInterface { 
    override fun onClick(){ // Do something here 
    } 
} 

あなたはつもり利用ラムダ式であれば、ここでそれはとても活動にCirclesShapt.kt

fun setOnClickListener(listener: (() -> Unit)){ 
} 

で どのように見えるかのように見えます。

mCircleShape.setOnClickListener { 
    // Do something here 
} 
関連する問題