kotlin中关于findViewById()、启动Activity最佳写法以及定义静态方法和kotlin标准函数写法

内容来自学习郭霖《第一行代码(第三版)》

关于findViewById()

Java中如果不用第三方开源库,例如ButterKnife,则需要对布局文件中所需要用到的控件在Java代码中使用findViewById方法来绑定获取控件的实例。而Kotlin中则不用,直接在activity中使用这个控件的ID就可以了。这是因为使用Kotlin编写Android项目在app/build.gradle文件的头部默人引用了apply plugin: 'kotlin-android-extensions'插件,这个插件会自动根据布局文件中定义的控件ID自动生成一个具有相同名称的变量。因此我门可以直接在activity中使用这个变量,而不用再次去调用findViewById方法了,其实apply plugin: 'kotlin-android-extensions'插件背后也是通过findViewById()方法来实现的。

启动Activity的最佳写法

在实际项目开发过程中经常会出现对接的情况。比如SecondActivity并不是你开发的,但现在你负责开发的部分需要启动SecondActivity,而你却不清楚启动SecondActivity需要传递哪些参数。这是无非就有两个方法:一个是你自己去阅读Second Activity中的代码,另外一个是询问编写SecondActivity的同事。你会不会觉得很麻烦呢?其实只需要换一种写法,就可以轻松解决上面的窘境,代码如下:

class SecondActivity : BaseActivity() {
    companion object{
        fun actionStart(context: Context,data1:String,data2:String){
            val intent=Intent(context,SecondActivity::class.java)
            intent.putExtra("param1",data1)
            intent.putExtra("param2",data2)
            context.startActivity(intent)
        }
    }
}

可以用apply标准函数简化,写法如下:

class SecondActivity : BaseActivity() {
    companion object{
        fun actionStart(context: Context,data1:String,data2:String){
            val intent=Intent(context,SecondActivity::class.java).apply{
            putExtra("param1",data1)
            putExtra("param2",data2)
            }
            context.startActivity(intent)
        }
    }
}

在启动SecondActivity的地方

SecondActivity.actionStart(this,"data1","data2")

定义静态方法

在Java中定义一个静态方法非常简单,只需要在方法上声明一个static关键字就可以了,如下所示:

public static Util{
	public static void doAction(){
		System.out.println("do action")
	}
}

这是一个简单的工具类,上述代码doAction就是一个静态方法,调用静态方法不需要创建类的实例,直接Util.doAction(),适合编写一些工具类的功能。
而Kotlin中推荐使用单例类的方法来实现静态方法同样的功能,具体实现如下:

object Util{
	fun doAction{
		println("do action")
	}
}

使用时,也是直接Util.doAction(),而不用创建类的实例。
不过这样,存在一定的问题,就是只要是Util类里面的方法都将变成类似这种静态方法的调用方式,如果只希望Util类中的某一个方法变成这种调用方式呢?答案如下:

class Util{
	fun doAction1(){
		println("do action1")
	}

	companion object{
		fun doAction2(){
		println("do action2")
		}
	}
}

上述Util类中doAction1是普通类,调用它需要先创建Util类的实例,而doAction2则可以用Util.doAction2()直接调用。

Kotlin中真正静态方法的写法

上述Kotlin静态方法的实现都不是真正意义上的静态方法,而是通过单例的方式来达到同样的效果,而kotlin真正意义上的实现静态方法如下:

使用@JvmStatic注解

class Util {
    fun doAction1(){
        println("do action1")
    }
    
    companion object{
        @JvmStatic
        fun doAction2(){
            println("do action2")
        }
    }
}

注意:@JvmStatic注解只能加在单例类或companion object中的方法上,还有Kotlin中所有的顶层方法都是静态方法

Kotlin标准函数

普通写法

    val list= listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")
    val builder=StringBuilder()
    builder.append("Start eating fruit.\n")
    for (fruit in list){
        builder.append(fruit).append("\n")
    }
    builder.append(("Eat all fruits"))
    val result=builder.toString()
    println(result)

用with写法

    val list= listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")
    val result= with(StringBuilder()){
        append("Start eating fruits.\n")
        for (fruit in list){
            append(fruit).append("\n")
        }
        append("Eat all fruits.")
        toString()
    }
    println(result)

用run写法

    val list= listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")
    val result=StringBuilder().run {
        append("Start eating fruits.\n")
        for (fruit in list){
            append(fruit).append("\n")
        }
        append("Eat all fruits.")
        toString()
    }
    println(result)

用apply写法

    val list= listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")
    val result=StringBuilder().apply {
        append("Start eating fruits.\n")
        for (fruit in list){
            append(fruit).append("\n")
        }
        append("Eat all fruits.")
    }
    println(result.toString())
  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kotlin ,可以使用 findViewById 来查找视图,但是 Kotlin 推荐使用属性委托来自动查找视图,而不需要使用 findViewById。 在使用属性委托时,需要使用 Kotlin Android Extensions 或者 View Binding。 1. Kotlin Android Extensions: Kotlin Android Extensions 是 Kotlin 提供的一个插件,它通过自动生成视图的属性来简化视图查找。 首先,在项目的 build.gradle 文件添加以下依赖: ```kotlin android { ... androidExtensions { experimental = true } } ``` 然后,在布局文件定义一个 id: ```xml <TextView android:id="@+id/myTextView" ... /> ``` 最后,在 Kotlin 代码就可以直接使用该视图的属性了: ```kotlin import kotlinx.android.synthetic.main.activity_main.* // 在 Activity myTextView.text = "Hello, Kotlin Android Extensions!" // 在 Fragment view.myTextView.text = "Hello, Kotlin Android Extensions!" ``` 2. View Binding: View Binding 是 Android Jetpack 提供的一种类型安全的视图查找方式。 首先,在项目的 build.gradle 文件启用 View Binding: ```kotlin android { ... viewBinding { enabled = true } } ``` 然后,在布局文件定义一个 id: ```xml <TextView android:id="@+id/myTextView" ... /> ``` 最后,在 Kotlin 代码使用 View Binding 来查找视图: ```kotlin import com.example.myapp.databinding.ActivityMainBinding // 在 Activity val binding = ActivityMainBinding.inflate(layoutInflater) binding.myTextView.text = "Hello, View Binding!" // 在 Fragment val binding = FragmentMainBinding.bind(view) binding.myTextView.text = "Hello, View Binding!" ``` 这些是在 Kotlin 查找视图的常用方法,可以根据个人偏好选择其一种方式来使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值