Kotlin-Android中Activity的那些事
Activity中Toast的使用
Toast.makeText(this,"ADD",Toast.LENGTH_SHORT).show()
Activity中不使用findViewById()获取控件ID
打开Gradle Scripts 在 build Gradle(Project:AppName)的dependecies中添加如下一段:
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
然后再在build gradle(Module:AppName:app)的 plugins 标签结束处添加如下一段:
plugins {
...
}
apply plugin: 'kotlin-android-extensions'
这样你就可以直接使用控件ID调用方法了,不再通过findViewById()获取了
bt1.setOnClickListener{...}
Activity中使用菜单Menu
现在res目录下右键Directory下新建Menu目录,然后新建MainMenu文件,编辑如下代码:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/Add_item"
android:title="ADD"/>
<item
android:id="@+id/Remove_item"
android:title="Remove"/>
</menu>
返回MainActivity按Ctrl+O(Mac OS中是Control+O)重写onCreateOptionsMenu()和onOptionsItemSelected()方法
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.main,menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when(item.itemId){
R.id.Add_item->Toast.makeText(this,"ADD",Toast.LENGTH_SHORT).show()
R.id.Remove_item->Toast.makeText(this,"REMONE",Toast.LENGTH_SHORT).show()
}
return true
}
Activity中intent的使用
这里先新建一个IntentActivity,并在清单文件manifest中注册,一般会自动注册
<activity android:name=".IntentMainActivity"> ...</activity>
intent显式
val intent = Intent(this, IntentMainActivity::class.java)
startActivity(intent)
intent隐式
intent隐式需要使用清单文件manifest中的action和category两个标签,你可以自行添加,action的name随意,第一个category的name需设置为default,第二个category的name随意
<activity android:name=".IntentMainActivity">
<intent-filter>
<action android:name="com.example.ACTION_START"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="com.example.activity.CATEGORY"/>
</intent-filter>
</activity>
返回MainActivity,编写以下代码:
val intent = Intent("com.example.ACTION_START")
intent.addCategory("com.example.activity.CATEGORY")
startActivity(intent)
intent数据的传递
传递数据
val intent = Intent(this, IntentMainActivity::class.java)
intent.putExtra("test_data", "显式intent")
startActivity(intent)
val data = intent.getStringExtra("test_data")
返回数据
val intent = Intent(this, IntentMainActivity::class.java)
startActivityForResult(intent,1)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when(requestCode){
1->if (resultCode== RESULT_OK){
val returnedData= data?.getStringExtra("data_return")
Log.d("MainActivity","returned data is $returnedData")
}
}
}
val intent =Intent()
intent.putExtra("data_return","hello,MainActivity")
setResult(RESULT_OK,intent)
finish()
扩展
intent不仅仅是可以跳转至你创建的Activity,还可以跳转至系统应用
如浏览器:
bt3.setOnClickListener {
val intent = Intent(Intent.ACTION_VIEW)
intent.data = Uri.parse("https://www.baidu.com")
startActivity(intent)
如跳转至电话:
bt4.setOnClickListener {
val intent = Intent(Intent.ACTION_DIAL)
intent.data = Uri.parse("tel:10010")
startActivity(intent)
参考
[1]郭霖.第一行代码 Android[M].第三版.北京.人民邮电出版社.2020.
|