继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

安卓使用kotlin优雅开发

慕姐8265434
关注TA
已关注
手记 1268
粉丝 222
获赞 1065

都说kotlin是站在巨人的肩膀上(java),Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言。确实,kotlin是非常强大的一门语言,下面我通过一个例子来给大家简阐述它的强大(安卓开发方面)。

1、kotlin简化了很多,下面简单举几个例子,kotlin少了findViewById,可以直接用控件的id来进行操作,同时设置点击监听也优化了,一句代码搞定button.setOnClickListener { doSomething() },同时打开startactivity可以这样写 startActivity(Intent(this, Main2Activity::class.java)),其他的我就不一 一介绍了,有兴趣的小伙伴可以参考官方文档

class MainActivity : AppCompatActivity() {
      override fun onCreate(savedInstanceState:Bundle?) {
          super.onCreate(savedInstanceState)          setContentView(R.layout.activity_main)          // No need to call findViewById(R.id.textView) as TextView          textView.text = "Kotlin for Android rocks!"
          //设置点击监听
          textView.setOnClickListener {
           startActivity(Intent(this,Main2Activity::class.java))//打开新的activity
           }
      }
  }
2、下面写了一个小例子,首先定义两个抽象类baseActivity和baseFragment来作为activity和Fragment的基类 
BaseActivity.kt
import android.os.Bundleimport android.support.v7.app.AppCompatActivityimport android.widget.Toast/**
* Created by aiiage on 2018/8/8.
* 定义activity的基类
*/abstract class BaseActivity : AppCompatActivity() {
    /**
     * 获取布局id
     */    protected abstract fun getContentViewLayoutID(): Int
    /**
     * 初始化控件
     */
    protected abstract fun initView(savedInstanceState: Bundle?)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (getContentViewLayoutID()!=0)
        {
            setContentView(getContentViewLayoutID())
            initView(savedInstanceState)
        }
    }
    //Toast弹窗    protected fun showToast(desc: String) {
        Toast.makeText(this,desc,Toast.LENGTH_SHORT).show()
    }
}
BaseFragment.kt
mport android.os.Bundleimport android.support.v4.app.Fragmentimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroup/**
* Created by aiiage on 2018/8/8.
* Fragment的基类
*/abstract class BaseFragment : Fragment(){
    /**
     * 获取布局ID
     */    protected abstract fun getContentViewLayoutID(): Int
    /**
     * 界面初始化
     */
    protected abstract fun init()
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return if (getContentViewLayoutID() != 0) {
            inflater.inflate(getContentViewLayoutID(), container, false)
        } else {
            super.onCreateView(inflater, container, savedInstanceState)
        }
    }
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        init()
    }
}
BaseActivity的引用
import android.annotation.SuppressLintimport android.content.Intentimport android.os.Bundleimport android.view.Viewimport com.andream.aiiage.learn.Rimport kotlinx.android.synthetic.main.activity_main.*@Suppress("UNUSED_EXPRESSION")
class MainActivity : BaseActivity(), View.OnClickListener {
    /**
     * 控件点击事件监听
     */    @SuppressLint("SetTextI18n")
    override fun onClick(p0: View) {
        when (p0.id) {
            R.id.hello -> {
                hello.text = "hello,kotlin"                showToast("welcome")
            }
            R.id.startNextActivity->{
                startActivity(Intent(this, Main2Activity::class.java))
            }
        }
    }
    /**
     * 返回布局id
     */    override fun getContentViewLayoutID(): Int {
        return R.layout.activity_main
    }
    /**
     * 控件的初始化
     */    override fun initView(savedInstanceState: Bundle?) {
        hello.setOnClickListener(this)
        startNextActivity.setOnClickListener(this)
    }
}
BaseFragment的引用
import com.andream.aiiage.learn.Rimport kotlinx.android.synthetic.main.first_fragment_layout.*/**
* Created by aiiage on 2018/8/8.
* firstFragment
*/class FirstFragment : BaseFragment(){
    override fun getContentViewLayoutID(): Int {
        return R.layout.first_fragment_layout
    }
    override fun init() {
        firstFragmentText.text="firstFragmentText"    }
}



作者:Andream778
链接:https://www.jianshu.com/p/8f4358f92544


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP