label 指定标题栏内容、Launcher的应用程序显示的名称。
menu 简单创建- res 文件夹下创建 menu文件夹
- 创建menu文件
- 重写onCreateOptionsMenu用于显示,并绑定menuInflater
- 重写onOptionsItemSelected用于监听事件
具体文件:
xml
activity 的文件:
// 展示 Menu , menuInflater 指的是 getMenuInflater(), 用于创建菜单。
override fun onCreateOptionsMenu(menu: Menu?): Boolean
{
menuInflater.inflate(R.menu.menu_second, menu)
// true 表示显示Menu,反之不显示
return true
}
// 展示的 menu 用此方法响应。
override fun onOptionsItemSelected(item: MenuItem): Boolean
{
when(item.itemId)
{
R.id.add_item -> Unit
R.id.second_item ->Unit
}
// 改为 true
return true
}
Intent 简述
显式Intent
Intent的“意图非常明显”,故称之。
fun goto()
{
val intent = Intent(this, TestActivity::class.java)
startActivity(intent)
}
隐式Intent
隐式Intent依靠对 AndroidManifest.xml 的 activity 的标签添加
它并不直接声明activity,而是提供action和category让系统分析用于启动。
- 添加标签
android 12开始,需要添加android:exported="true"用于支app,这里声明了action为TestActivity_ACTION,category为默认的android.intent.category.DEFAULT也就是可以不提供category。
代码(二者等价):
// 方法1
startActivity(Intent("TestActivity_ACTION"))
// 方法2
startActivity(
Intent("TestActivity_ACTION").run {
addCategory("android.intent.category.DEFAULT")
}
)
- 每个 intent 由 一个 action 和 任意数量 category 配合而成。
- 如果无法匹配,则报错。
Intent还可以启动其他程序Activity传递数据
即Data标签
传递数据
private fun goto()
{
val intent = Intent(this, TestActivity::class.java)
intent.putExtra("key", "value")
startActivity(intent)
}
在启动的activity获取数据:
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
val data = intent.getStringExtra("key")
}
退出某个activity返回值
https://blog.csdn.net/qq_33666539/article/details/84630123/?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-1–blog-120916287.pc_relevant_multi_platform_whitelistv1&spm=1001.2101.3001.4242.2&utm_relevant_index=4
底层Activity被销毁,临时数据保存方法当Activity 1 进入 Activity 2 后,某种原因,Activity 1被销毁,则Activity 2返回时,会调用Activity 1的onRestart()重新创建,此时部分数据会丢失:比如输入框文字、
解决方法:使用onSaveInstanceState()保存数据于Bundle,于onCreate()中读取。
class TestActivity : AppCompatActivity()
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
if(savedInstanceState != null) {
val value = savedInstanceState.getString("key")
}
}
override fun onSaveInstanceState(outState: Bundle)
{
super.onSaveInstanceState(outState)
outState.putString("key", "value")
}
}
拓展:Intent也可以保存Bundle用于传递。屏幕旋转时保存数据方法
不建议用上述方法,而是使用Jetpack ViweModel存储数据。Activity的启动模式
- 有四种:standard、singleTop、singleTask和singleInstance
- 在activity标签指定android:launchMode
- 具体暂且不表
- with
函数,参数一是上下文指定,二是lambda表达式,返回最后一行值
val res = with(obj) {
// 也就是 obj.get("value"),返回的也是此函数的值
get("value")
}
-
run
不能直接调用,依附于对象,返回最后一行作为值 -
apply
同run,但返回本体



