在Android中使用scala编程(-)

ScalaActivity.scala

package com.example

import android.app.Activity
import android.os.Bundle
import android.view.View
import android.view.View.OnClickListener
import android.widget.EditText

import android.widget.{Toast, Button}
import android.content.Context


/**
 * Created by IntelliJ IDEA.
 * User: brant.yan
 * Date: 11-8-1
 * Time: 下午5:08
 * To change this template use File | Settings | File Templates.
 */


class ScalaActivity extends Activity with ActivityUtil {
    override def onCreate(savedInstanceState: Bundle): Unit = {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)
    val username = findViewById(R.id.username).asInstanceOf[EditText]
    val password = findViewById(R.id.password).asInstanceOf[EditText]
     val context:Context=this
    button(R.id.submit).onClicked {
      Toast.makeText(context, "cccc", 5000).show()
    }
  }
}


ActivityUtil.scala

package com.example

import android.widget.Button
import android.app.Activity
import android.view.View.OnClickListener
import android.view.View

/**
 * Created by IntelliJ IDEA.
 * User: brant.yan
 * Date: 11-8-3
 * Time: 下午3:26
 * To change this template use File | Settings | File Templates.
 */

trait ActivityUtil extends Activity {
  def button(id: Int): Button = {
    this.findViewById(id).asInstanceOf[Button]
  }
  implicit def buttonWrapper(button: Button) = new {
    def onClicked(action: => Any) =
    {
      button.setOnClickListener(new OnClickListener() {
        def onClick(p1: View) = {
          action
        }
      })
    }
  }


}

没有new,表示定义了一个匿名的类
有了new,生成了一个对象
new {}表示生成了一个对象
而new {
    def onClicked(...) {}
}
表示生成了一个含有onClicked方法的对象
当scala发现你在代码中写了button.onClicked,但是button又没有onClicked这个方法时
它就会去寻找当前范围内可用的implicit
并且要求其参数为Button,返回的对象中,有onClicked这个方法,并且onClicked的参数,与你button.onClieck(...)的参数一致
如果没找到,就报错。找到了,就把button.onClicked转为buttonWrapper(button).onclicked(...)

以上解释感谢zhidao.it  有兴趣的童鞋可以访问其网站 zhidao.it  进行了解

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值