从零开始学安卓(kotlin)二——Activity
目录基本用法基本用法项目中的任何Activity都应该重写onCreate()方法,而目前我们的FirstActivity 中已经重写了这个方法,这是Android Studio自动帮我们完成的Android程序的设计讲究逻辑和视图分离,最好每一个Activity都能对应一个布局。布局是用来显示界面内容的。...
·
基本知识
-
项目中的任何Activity都应该重写onCreate()方法,而目前我们的FirstActivity 中已经重写了这个方法,这是Android Studio自动帮我们完成的
-
Android程序的设计讲究逻辑和视图分离,最好每一个Activity都能对应一个布局。布局是用来显示界面内容的。
-
勾选Generate Layout File表示会自动为FirstActivity创建一个对应的布局文件,勾选 Launcher Activity表示会自动将FirstActivity设置为当前项目的主Activity
-
销毁一个activity,finish()方法
-
startActivity()方法,用于启动Activity
-
Android中的Activity是可以层叠的。我们每启动一个 新的Activity,就会覆盖在原Activity之上,然后点击Back键会销毁最上面的Activity,下面的 一个Activity就会重新显示出来。

-
activity四种状态:运行、暂停、停止、销毁
button
activity中:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val button1: Button = findViewById<Button>(R.id.button1)
button1.setOnClickListener {
Toast.makeText(this, "You clicked Button 1", Toast.LENGTH_SHORT).show()
}
}
- Toast是Android系统提供的一种非常好的提醒方式
Toast.makeText(this, "You clicked Button 1", Toast.LENGTH_SHORT).show()第一个参数是Context,也就是Toast要求的上下文,由于Activity本身就是一个Context对象,因此 这里直接传入this即可。第二个参数是Toast显示的文本内容。第三个参数是Toast显示的时 长,有两个内置常量可以选择:Toast.LENGTH_SHORT和Toast.LENGTH_LONG。 - **setOnClickListener()**方法为按钮注册一个监听器,点击按钮时就会执行监听器中的onClick()方法。
button.setOnClickListener {}
menu
- res目录下新建menu目录
- 重写onCreateOptionsMenu()方法
- 重写onOptionsItemSelected()方法
Intent(跳转、传递数据)
- 显示intent
Intent有多个构造函数的重载,其中一个是Intent(Context packageContext, Class<? > cls)。这个构造函数接收两个参数:第一个参数Context要求提供一个启动Activity的上下 文;第二个参数Class用于指定想要启动的目标Activity,通过这个构造函数就可以构建出 Intent的“意图”。
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
- 隐式Intent
button1.setOnClickListener {
val intent = Intent("com.example.activitytest.ACTION_START")
intent.addCategory("com.example.activitytest.MY_CATEGORY")
startActivity(intent)
}
<activity android:name=".SecondActivity" >
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.example.activitytest.MY_CATEGORY"/>
</intent-filter>
</activity>
- 展示一个网页
button1.setOnClickListener {
val intent = Intent(Intent.ACTION_VIEW)
intent.data = Uri.parse("https://www.baidu.com")
startActivity(intent)
}
- 调用拨号
button1.setOnClickListener {
val intent = Intent(Intent.ACTION_DIAL)
intent.data = Uri.parse("tel:10086")
startActivity(intent)
}
- 向下一个Activity传递数据
button1.setOnClickListener {
val data = "Hello SecondActivity"
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("extra_data", data)
startActivity(intent)
}
val extraData = intent.getStringExtra("extra_data")
Log.d("SecondActivity", "extra data is $extraData")
- 返回数据给上一个Activity,startActivityForResult(intent, 1)方法
button1.setOnClickListener {
val intent = Intent(this, SecondActivity::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("FirstActivity", "returned data is $returnedData")
} }
}
button2.setOnClickListener {
val intent = Intent()
intent.putExtra("data_return", "Hello FirstActivity")
setResult(RESULT_OK, intent)
finish()
}
override fun onBackPressed() {
val intent = Intent()
intent.putExtra("data_return", "Hello FirstActivity")
setResult(RESULT_OK, intent)
finish()
}
activity生存期的7个回调方法
- onCreate()。它会在Activity第一次被创建的时候调用。在这个方法中完成Activity的初始化操作,比如加载布局、绑定事件等。
- onStart()。这个方法在Activity由不可见变为可见的时候调用。
- onResume()。这个方法在Activity准备好和用户进行交互的时候调用。此时的Activity一 定位于返回栈的栈顶,并且处于运行状态。
- onPause()。这个方法在系统准备去启动或者恢复另一个Activity的时候调用。我们通常 会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶Activity的使用。
- onStop()。这个方法在Activity完全不可见的时候调用。它和onPause()方法的主要区 别在于,如果启动的新Activity是一个对话框式的Activity,那么onPause()方法会得到执 行,而onStop()方法并不会执行。
- onDestroy()。这个方法在Activity被销毁之前调用,之后Activity的状态将变为销毁状态。
- onRestart()。这个方法在Activity由停止状态变为运行状态之前调用,也就是Activity 被重新启动了。
3种生存期
- 完整生存期。Activity在onCreate()方法和onDestroy()方法之间所经历的就是完整生存期。一般情况下,一个Activity会在onCreate()方法中完成各种初始化操作,而在 onDestroy()方法中完成释放内存的操作。
- 可见生存期。Activity在onStart()方法和onStop()方法之间所经历的就是可见生存期。在可见生存期内,Activity对于用户总是可见的,即便有可能无法和用户进行交互。我 们可以通过这两个方法合理地管理那些对用户可见的资源。比如在onStart()方法中对资源进行加载,而在onStop()方法中对资源进行释放,从而保证处于停止状态的Activity不会占用过多内存。
- 前台生存期。Activity在onResume()方法和onPause()方法之间所经历的就是前台生存期。在前台生存期内,Activity总是处于运行状态,此时的Activity是可以和用户进行交互的,我们平时看到和接触最多的就是这个状态下的Activity。
Activity的最佳实践
- 知晓当前是在哪一个Activity,不需要让 BaseActivity在AndroidManifest.xml中注册,所以选择创建一个普通的Kotlin类就可以 了。然后让BaseActivity继承自AppCompatActivity,并重写onCreate()方法。让BaseActivity成为ActivityTest项目中所有Activity的父类,由于BaseActivity又是继承自 AppCompatActivity的,所以项目中所有Activity的现有功能并不受影响,它们仍然继承了 Activity中的所有特性。
open class BaseActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d("BaseActivity", javaClass.simpleName)
} }
- 退出activity,controller类
- 传递数据
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)
} }
Activity2.actionStart(this, "data1", "data2")
更多推荐



所有评论(0)