使用 kotlin 开发 android 遇到的问题

使用 kotlin 开发 android 遇到的问题

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


2018.4.4 更新

用 kotlin 的方式自定义回调事件(kotlin函数参数)
https://blog.csdn.net/Captive_Rainbow_/article/details/79818279


2018.3.21 更新

Kotlin之自定义 Live Templates(模板代码)
http://blog.csdn.net/Captive_Rainbow_/article/details/79642244


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:       [email protected]
 * 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? 
)

猜你喜欢

转载自blog.csdn.net/captive_rainbow_/article/details/78720781