使用 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?
)