根据当前界面判断是哪一个Activity

比如说我们有两个界面:FirstActivitySecondActivity
默认情况下这两个类继承于AppCompatActivity父类

要想实现这个功能,我们只需要再创建一个普通的类BaseActivity用来打印当前实例的类名
然后实现下图的继承关系:

具体实现:

重写BaseActivityonCreate()方法:

1
2
3
4
5
6
7
8
//为了使BaseActivity可以被继承,需要在类名前加上open关键字
open class BaseActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//打印当前Activity的类名
Log.d("BaseActivity",javaClass.simpleName)
}
}

javaClass表示获取当前实例的Class对象,javaClass.simpleName表示获取当前实例的类名

然后让BaseActivity成为FirstActivitySecondActivity的父类

1
2
3
class FirstActivity : BaseActivity() {
//.............
}
1
2
3
class SecondActivity : BaseActivity() {
//.............
}

由于在调用子类时,也会调用父类的onCreate()方法,所以BaseActivity才可以打印其子类的类名

随时随地退出程序

想实现这个功能,只需要用一个专门的集合对所有的Activity进行管理。
创建一个单例类ActivityCollector

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
object ActivityCollector {
//创建一个用来暂存Activity的集合
private val activities = ArrayList<Activity>()
//将Activity实例添加到集合中
fun addActivity(activity:Activity){
activities.add(activity)
}
//将Activity从集合中移除
fun removeActivity(activity: Activity){
activities.remove(activity)
}
//终止程序
fun finishAll(){
for(activity in activities){
//检查是否正在被销毁中
if(!activity.isFinishing){
activity.finish()
}
}
activities.clear()
}
}

只需在其他Activity中调用这个单例类即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class FirstActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.first_layout)
//将当前实例添加到集合中
ActivityCollector.addActivity(this)
}

override fun onDestroy() {
super.onDestroy()
//在销毁时将当前实例从集合中删除
ActivityCollector.removeActivity(this)
}

button.setOnClickListener{
//点击此按钮后即销毁程序
ActivityCollector.finishAll()
}
}

启动Activity的最佳方式

如果在项目交接时,别人不知道启动SecondActivity需要传递哪些数据,就需要做如下改动
修改SecondActivity中的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class SecondActivity : BaseActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.secomd_layout)
}
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.startActivities(intent)
}
}
}

这样的话就可以简化启动SecondActivity的代码,还可以解决上面的问题:

1
2
3
button.setOnClickListener{
SecondActivity.actionStart(this,"data1","data2")
}

 评论

载入天数...载入时分秒...