使用 kotlin 开发 android 遇到的问题

来源:互联网 发布:红尘男女 网络歌手 编辑:程序博客网 时间:2024/05/21 05:24

使用 kotlin 开发 android 遇到的问题

本篇主要总结一些在 java 中写的代码在 kotlin 中的写法,不定期更新。。


2017.12.6 更新

kotlin 1.2 版本新增了一个针对 lateinit 标记的变量的判断,判断变量是否已经完成初始化 ::mMainPresenter.isInitialized

    @Inject lateinit var mMainPresenter: MainPresenter    override fun onDestroy() {        /*        (1.2版本已发布,已解决)        权限更改后销毁activity时,这里会报错变量没有初始化        等 kotlin 1.2 版本再解决 https://blog.jetbrains.com/kotlin/2017/09/kotlin-1-2-beta-is-out/        */        if (::mMainPresenter.isInitialized) {            mMainPresenter.detachView()        }        super.onDestroy()    }

kotlin 拓展函数

  • 关于 kotlin 拓展函数,全部可以写到一个 kotlin file 里边,这样方便管理,就像工具类那样
    这里写图片描述

2017.12.5 更新

匿名内部类

  • 比如实现自定义的点击事件

    java 中:

这里写图片描述

kotlin 中:

这里写图片描述

拿到 class 对象

java 中:

Intent intent = new Intent(context, MainActivity.class);context.startActivity(intent);adapter.register(TalkOpenAnswerModel.class, talkOpenAnswerViewProvider);

kotlin 中:

val intent = Intent(context, MainActivity::class.java)            context.startActivity(intent)adapter.register(LogOutBinderModel::class.java, logOutViewBinder)

工具类的写法

java 中:

public class DeviceUtils {    /**     * 获取屏幕的高度 单位/px     */    public static int getScreenHeight(Activity activity) {        return getDisplayMetrics(activity).heightPixels;    }}

kotlin 中:

object DeviceUtil {    /**     * 得到屏幕的高     *     * @param context     * @return     */    fun getScreenHeight(context: Context): Int {        val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager        return wm.defaultDisplay.height    }}

单例模式

java 中:

public class ImageLoader {    public static ImageLoader getInstance() {        return SingletonLoader.INSTANCE;    }    private static class SingletonLoader {        private static final ImageLoader INSTANCE = new ImageLoader();    }}

kotlin 中:

class ImageLoader {    companion object {        val INSTANCE = ImageLoader()    }}

网络请求实体类

  • java 中实体类只能一个一个的类文件创建
  • kotlin 中可以创建一个 kotlin 文件,然后创建多个 data class 作为实体类

java 中:

public class Uuid {    private String uuid;    public Uuid(String uuid) {        this.uuid = uuid;    }    public String getUuid() {        return uuid;    }    public void setUuid(String uuid) {        this.uuid = uuid;    }}

kotlin 中:

/** * Created by wendong on 2017/11/15 0015. * Email:       wdeo3601@163.com * Description: */data class BillReqModel(@SerializedName("time_stamp") var timeStamp: String)data class BillRespModel(        @SerializedName("list") var list: List<BillBinderModel?>?,        @SerializedName("total_income") var totalIncome: String?, //150        @SerializedName("total_pay") var totalPay: String?, //42        @SerializedName("bill_when_empty") var billWhenEmpty: String? )
原创粉丝点击