Kotlin实战基础 - 设置点击事件、Activity跳转、传值
liuyong.blog.csdn.net成就一亿技术人!
不论是新手,还是从Java过度的老手,都需要简单看一下Kt在使用上的语法不同;当然如果有经验的话,分分钟过度完成;如果是新手的话,也完全不影响你学习。加油ing~
今年的目标之一,清空草稿箱Blog,该篇就是堆积了一年多的一篇Kotlin基础过度Blog...
基础过度
尚未完整,遇缺再补
-
-
-
-
- 点击事件
- Activity 跳转
- Activity 跳转 + Intent传值
-
-
点击事件
点击事件是基础功能,很多年前我写过Java支持的几种四种点击方式
以下我将列出除Button控件外的其他几种kt实现方式,第一、二种常用
布局文件
<TextView
android:id="@+id/tv_btn"
android:layout_width="match_parent"
android:layout_height="48dp"
android:text="测试点击事件"
android:gravity="center"
/>
匿名内部类(单控件常用)
findViewById<TextView>(R.id.tv_btn).setOnClickListener(object :OnClickListener{
override fun onClick(p0: View?) {
Toast.makeText(this@MainActivity, "点击了",Toast.LENGTH_SHORT).show()
}
})
实现 View.OnClickListener接口
的onClick
方法(多控件常用)
class MainActivity : AppCompatActivity(), View.OnClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
findViewById<TextView>(R.id.tv_btn).setOnClickListener(this)
}
override fun onClick(p0: View?) {
when(p0?.id){
R.id.tv_btn -> Toast.makeText(this, "点击了", Toast.LENGTH_SHORT).show()
}
}
xml内帮控件添加 onClick属性
,这个属性代表的是一个方法,需要在对应activity或fragment中添加该方法
布局文件(添加onClick属性)
<TextView
android:id="@+id/tv_btn"
android:layout_width="match_parent"
android:layout_height="48dp"
android:text="测试点击事件"
android:onClick="btnClick"
android:gravity="center"
/>
若 “btnClick“ 方法报红,可通过alter+enter提示进行修改(未遇到)
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
fun btnClick(view: View) {
when (view.id) {
R.id.tv_btn -> Toast.makeText(this@MainActivity, "点击了", Toast.LENGTH_SHORT).show()
}
}
}
Activity 跳转
在Kt中有 ::class 、class.java、javaClass、javaClass.kotlin
等声明方式,意义有所不同,等以后有时间我再补充记录一篇
常用方式 - 1
val intent = Intent(context, SecondActivity::class.java)
startActivity(intent)
常用方式 - 2
val intent = Intent(context, SecondActivity().javaClass)
startActivity(intent)
Activity 跳转 + Intent传值
如果对于Activity传值不太了解的同学,可以去我早期写的 那些年我错过的Intent基础 学习学习~
场景:A页面(FirstActivity )传值到 B页面(SecondActivity)
FirstActivity 不需要回传数据就用 startActivity
val intent = Intent(this, FirstActivity::class.java)
intent.putExtra("main_data", "data_from_main")
startActivity(intent)
场景:A页面(FirstActivity )传值到 B页面(SecondActivity),当B页面关闭时传值回A页面
FirstActivity 需要回传数据就用 startActivityForResult
,请求code(100) 自行定义,只要唯一就行
val intent = Intent(this, FirstActivity::class.java)
intent.putExtra("main_data", "data_from_main")
startActivityForResult(intent , 100)
SecondActivity
在 onCreate()
中接收传过来的数据
val data = intent.getStringExtra("main_data")
在退出时,回传数据给 FirstActivity
val intent1 = Intent()
intent1.putExtra("return_data", "data_from_first")
setResult(RESULT_OK, intent1)
A页面重写 onActivityResult()
方法,接收回传数据
-
requestCode(请求码)
:startActivityForResult
所传参数; -
resultCode(响应码)
: FirstActivity 回传时用的参数,一般是RESULT_OK
或RESULT_CANCELED
;override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when(requestCode){
100 -> if (resultCode == RESULT_OK){
val returnData = data?.getStringExtra("return_data")
}
}
}