1.apply函数简化intent.putExtra():
val intent = Intent(this, MainActivity::class.java).apply {
putExtra("param1","data1")
putExtra("param2","data2")
}
startActivity(intent)
2.简化SharedPreferences:
fun SharedPreferences.open(block: SharedPreferences.Editor.() -> Unit) {
val editor = edit()
editor.block()
editor.apply()
}
使用:
getSharedPreferences("data", Context.MODE_PRIVATE).open {
putString("haha", "llaa")
putBoolean("married", false)
}
3.简化ContentValues:
fun cvOf(vararg pairs: Pair<String, Any?>) = ContentValues().apply {
for(pair in pairs){
val key = pair.first
val value = pair.second
when(value){
is Int -> put(key, value)
is Long -> put(key, value)
is Short -> put(key, value)
is Float -> put(key, value)
is Double -> put(key, value)
is Boolean -> put(key, value)
is String -> put(key, value)
is Byte -> put(key, value)
is ByteArray -> put(key, value)
null -> putNull(key)
}
}
}
4.懒加载技术实现lazy():
fun <T> later(block: () -> T) = Later(block)
class Later<T>(val block: () -> T){
var value: Any? = null
operator fun getValue(any: Any?, prop: KProperty<*>): T{
if (value == null){
value = block
}
return value as T
}
}
使用:
val haha:String by later {
"hhaa"
}
5.泛型实化简化startActivity()并附带intent传值
inline fun <reified T> startActivity(context: Context, block: Intent.() -> Unit){
val intent = Intent(context, T::class.java)
intent.block()
context.startActivity(intent)
}
使用:
startActivity<MainActivity>(this){
putExtra("haha","1111")
putExtra("hahaaaa","1111")
}
6.简化N个数的最大值最小值:
fun <T : Comparator<T>> MyMax(vararg nums: T): T{
if (nums.isEmpty()) throw RuntimeException("params can not be empty")
var maxNum = nums[0]
for (num in nums){
if (num > maxNum){
maxNum = num
}
}
return maxNum
}
使用:
val a = 1
val b = 3
val c = 2
val largest = MyMax(a,b,c)
7.简化Toast:
fun String.showToast(context: Context, duration: Int = Toast.LENGTH_SHORT){
Toast.makeText(context, this, duration).show()
}
fun Int.showToast(context: Context, duration: Int = Toast.LENGTH_SHORT){
Toast.makeText(context, this, duration).show()
}
用法:
"ahah".showToast(this, Toast.LENGTH_LONG)
8.简化Snackbar:
fun View.showSnackbar(text: String, actionText: String?=null, duration: Int = Snackbar.LENGTH_SHORT, block: (() -> Unit)? =null){
val snackbar = Snackbar.make(this, text, duration)
if (actionText != null && block != null){
snackbar.setAction(actionText){
block()
}
}
snackbar.show()
}
fun View.showSnackbar(text: String, actionResId: Int?=null, duration: Int = Snackbar.LENGTH_SHORT, block: (() -> Unit)? =null){
val snackbar = Snackbar.make(this, text, duration)
if (actionResId != null && block != null){
snackbar.setAction(actionResId){
block()
}
}
snackbar.show()
}