总结一下kotlin和java的异同:
1.对象
java写法:MainActivity.this
kotlin 写法:this@MainActivity
2.类
java写法:MainActivity.class
kotlin 写法:MainActivity::class.java
3.继承
java写法:
public class MainActivity extends AppCompatActivity {
}
kotlin 写法:Kotlin 的写法(在 Kotlin 中被继承类必须被 open 关键字修饰)
class MainActivity : AppCompatActivity() {
}
变量
java写法:Intent intent = new Intent()
kotlin 写法:var intent = Intent()
常量
java写法:final String text = "";
kotlin 写法:val text = ""
静态常量
java写法:
public class MainActivity extends AppCompatActivity {
static final String text = "";
}
kotlin 写法:(需要注意的是要把静态变量定义在类上方)
const val text = ""
class MainActivity : AppCompatActivity() {
}
定义方法
java方法
public void test(String message) {
}
kotlin写法 (Unit 跟 void 一样效果)
fun test(message : String) : Unit {
}
// 在 Kotlin 可以省略 Unit 这种返回值
fun test(message : String) {
}
重载方法:
java写法
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
kotlin写法
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
}
基本数据类型
java写法
int i = 1;
long l = 2;
boolean b = true;
float f = 0;
double d = 0;
char c = 'A';
String s = "text";
kotlin的写法
var i : Int = 1
var l : Long = 2
var b : Boolean = true
var f : Float = 0F
var d : Double = 0.0
var c : Char = 'A'
var s : String = "text"
// 更简洁点可以这样,自动推倒类型
var i = 1
var l = 2
var b = true
var f = 0F
var d = 0.0
var c = 'A'
var s = "text"
比较类型
Java 的写法
if ("" instanceof String) {
}
kotlin的写法
if ("" is String) {
}
转换符
java写法
int number = 100;
System.out.println(String.format("商品数量有%d", number));
kotlin的写法
var number = 100
println("商品数量有$number")
函数内部函数:
fun checkNum(start:Int,end:Int){
fun isThree(x:Int)=(x%3==0)
fun isFive(x:Int)=(x%5==0)
for (number in start..end){
if (isFive(number)){
Log.e("--main--","K"+"被五整除")
}else if (isThree(number)){
Log.e("--main--","K"+"被三整除")
}
}
}
kotlin 中的lambda
fun add(x:Int,y:Int){
return x+y
}
//可以改成 匿名函数
var add={x:Int,y:Int ->
x+y
}
fun comboTwoValue(x:Int,y:Int,method :(a:Int,b:Int) ->Int):Int{
return method(x,y)
}
kotlin支持扩展功能:
package com.kotlin.base.ext
//Kotlin通用扩展
/*
扩展Observable执行
*/
fun <T> Observable<T>.excute(subscriber: BaseSubscriber<T>, lifecycleProvider: LifecycleProvider<*>) {
this.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.compose(lifecycleProvider.bindToLifecycle())
.subscribe(subscriber)
}
/*
扩展数据转换
*/
fun <T> Observable<BaseResp<T>>.convert():Observable<T>{
return this.flatMap(BaseFunc())
}
/*
扩展Boolean类型数据转换
*/
fun <T> Observable<BaseResp<T>>.convertBoolean():Observable<Boolean>{
return this.flatMap(BaseFuncBoolean())
}
/*
扩展点击事件
*/
fun View.onClick(listener:View.OnClickListener):View{
setOnClickListener(listener)
return this
}
/*
扩展点击事件,参数为方法 直接传入一个方法进去调用
view.setOnclicklistener{
method()
}
*/
fun View.onClick(method:() -> Unit):View{
setOnClickListener { method() }
return this
}
/*
扩展Button可用性
*/
fun Button.enable(et:EditText,method: () -> Boolean){
val btn = this
et.addTextChangedListener(object : DefaultTextWatcher(){
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
btn.isEnabled = method()
}
})
}
/*
扩展视图可见性
*/
fun View.setVisible(visible:Boolean){
this.visibility = if (visible) View.VISIBLE else View.GONE
}
筛选就是这么简单:
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
super.onBindViewHolder(holder, position)
val model = dataList[position]
//是否选中
holder.itemView.mCheckedCb.isChecked = model.isSelected
//加载商品图片
holder.itemView.mGoodsIconIv.loadUrl(model.goodsIcon)
//商品描述
holder.itemView.mGoodsDescTv.text = model.goodsDesc
//商品SKU
holder.itemView.mGoodsSkuTv.text = model.goodsSku
//商品价格
holder.itemView.mGoodsPriceTv.text = YuanFenConverter.changeF2YWithUnit(model.goodsPrice)
//商品数量
holder.itemView.mGoodsCountBtn.setCurrentNumber(model.goodsCount)
//选中按钮事件
holder.itemView.mCheckedCb.onClick {
model.isSelected = holder.itemView.mCheckedCb.isChecked
val isAllChecked = dataList.all {
it.isSelected }
Bus.send(CartAllCheckedEvent(isAllChecked))
notifyDataSetChanged()
}
//商品数量变化监听
holder.itemView.mGoodsCountBtn.getEditText().addTextChangedListener(object:DefaultTextWatcher(){
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
model.goodsCount = s.toString().toInt()
Bus.send(UpdateTotalPriceEvent())
}
})
}
//返回的界面更新
private fun initObserve() {
Bus.observe<CartAllCheckedEvent>().subscribe { t: CartAllCheckedEvent ->
run {
mAllCheckedCb.isChecked = t.isAllChecked
updateTotalPrice()
}
}.registerInBus(this)
Bus.observe<UpdateTotalPriceEvent>().subscribe {
updateTotalPrice()
}.registerInBus(this)
}