将原生android项目转换为kotlin时遇到的问题
2018-01-26 16:46
567 查看
代码重构过程遇到的问题
对于Fragment,只有在onCreateView方法执行完毕后才能直接通过id引用布局文件中的控件同时使用DataBinding框架和Kotlin导致的错误【解决方案链接】
Error:(x, x) Unresolved reference: databinding
定制Glide的全局加载配置时,需要创建一个类继承AppGlideModule。然后使用GlideApp而不是Glide去加载图片。我在某个Kotlin文件中同时使用了Glide框架后,当MakeProject时,报错:找不到GlideApp。也就是编译时没有生成该类。解决方法,修改build.gradle文件【解决方案链接】
implementation 'com.github.bumptech.glide:glide:4.4.0' kapt 'com.github.bumptech.glide:compiler:4.4.0'
在Java代码和Kotlin代码中混合使用ButteeKnife框架时,建议修改build.gradle文件中ButterKnife的注释生成器
implementation 'com.jakewharton:butterknife:8.8.1' kapt 'com.jakewharton:butterknife-compiler:8.8.1'
kotlin+Lamada+RxJava的一些代码精简过程
//原始版本 .subscribe(object : Subscriber<ZhihuThemeList>() { override fun onNext(t: ZhihuThemeList?) {} override fun onCompleted(){} override fun onError(e: Throwable?) {} }) //精简版 + .subscribe(object : Action1<ZhihuThemeList>{ override fun call(t:ZhihuThemeList?){} }) //精简版 ++ (匿名内部类或者接口只有一个待实现的方法,可使用Lambda表达式) .subscribe{ data -> mAdapter?.setmDataSet(data) } //精简版 +++ (如果无需重命名唯一待实现的方法的参数(参数只有一个),可省略参数声明直接用it表示) .subscribe { mAdapter?.setmDataSet(it) }
RecycleView中Databinding+Kotlin的具体应用
①首先写一个通用的工具类Util.kt
import android.databinding.DataBindingUtil import android.databinding.ViewDataBinding import android.support.annotation.LayoutRes import android.support.v7.widget.RecyclerView import android.view.LayoutInflater import android.view.View import android.view.ViewGroup /** * 通用的ViewHolder类,由于使用了DataBinding框架所以无需使用ButterKnife框架进行@BindView的声明 */ class CommonViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) /** * 返回ViewHolder的简便的拓展方法 */ fun <T : ViewDataBinding> ViewGroup.inflate(@LayoutRes layoutRes: Int, attachToParent: Boolean = false): CommonViewHolder { return CommonViewHolder(DataBindingUtil.inflate<T>(LayoutInflater.from(context), layoutRes, this, attachToParent).root) }
②在其它自定义的RecycleViewAdapter中的应用
class MenuAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() { companion object { private val TYPE_TOP = 0 private val TYPE_NOT_TOP = 1 } ... //省略一部分代码 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = when (viewType) { TYPE_TOP -> parent.inflate<TopItemMenuRecycleviewBinding>(R.layout.top_item_menu_recycleview) else -> parent.inflate<ItemLeftMenuRecycleviewBinding>(R.layout.item_left_menu_recycleview) } }
相关文章推荐
- android 项目调试遇到的问题集锦(转)
- 解决对android APK 项目进行签名过程中遇到的问题
- android麻将小项目2:在写流局、结果以及整个循环过程遇到的问题
- Android项目proguard代码混淆遇到的一系列问题,外部jar,Gson包等
- maven整合到eclipse中的android项目遇到的几个问题及解决方法
- 打开项目遇到Unknown Android Packaging Problem问题
- 项目中遇到的Android drawText的一些问题
- 关于Android项目混淆遇到的问题
- 关于Android开发导入已有项目遇到Project has no default.properties file! Edit the project properties to set one.问题的解决方法
- 【边做项目边学Android】小白会遇到的问题--Appcompat_V7问题
- Ant 多渠道 多项目应用library 打包Android项目遇到问题总结
- 在hibernate中直接执行原生sql遇到类型转换问题
- 【android】关于getBaseContext();this等-----项目中遇到的问题
- android项目——手机卫士_遇到的问题
- 使用eclipse+git插件开发android项目时遇到的问题及解决
- 解决当导入一个android项目到my eclipse时遇到的问题
- 【边做项目边学Android】小白会遇到的问题--This Android SDK requires Android Developer Toolkit version 23.0.0 or above
- 打开项目遇到Unknown Android Packaging Problem问题
- Android项目proguard代码混淆遇到的一系列问题,外部jar,Gson包等
- 7-8月android项目遇到的问题总结(待详细完善)