我正在开发一个在kotlin开发的Android应用程序,它有两个活动。作为活动1是主要活动,当点击特定布局活动2时,即开始对话活动。
我遇到的问题是,每次单击活动1上的特定布局时,都会调用活动2上的onCreate方法(之前调用的次数)+ 1次。这意味着第一次单击布局时,onCreate方法被调用一次。然后我用finish()关闭活动2,如果再次单击布局区域,则活动2的oncreate方法被调用两次。如果我再次这样做,3次,然后4,5次等
Activity one如下所示,我将onClick监听器添加到布局区域:
class ActivityOne : AppCompatActivity(), View.OnClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_one)
Timber.plant(Timber.debugTree())
layoutAddNewProject.setOnClickListener(this)
}
override fun onClick(view: View?){
Timber.d("Click on view ${view.toString()}")
if (view?.id == layoutAddNewProject.id){
val intent = Intent(this, ActivityTwo::class.java)
startActivity(intent)
}
}
}
然后活动二如下所示。请注意,它有一个按钮,单击该按钮可关闭活动:
class ActivityTwo : AppCompatActivity(), View.OnClickListener {
override fun onCreate(savedInstanceState: Bundle?){
super.onCreate(savedInstance)
setContentView(R.layout.activity_two)
setFinishOnTouchOutside(false)
Timber.plant(Timber.DebugTree())
Timber.d("Starting activity two")
btnCancel.setOnClickListener(this)
}
override fun onClick(view: View?){
if (view?.id == btnCancel.id){
Timber.d("Cancel pressed")
finish()
}
}
}
活动,布局等的名称是虚构的,但代码与我的真实代码一致。
所以,我在活动二上找出onCreate的方式被多次调用,是因为我多次看到日志消息“Starting activity two”。
另请注意,当在活动二上单击btnCancel时,我还会多次收到日志消息“Cancel pressed”(与调用onCreate方法的次数一样多)。
我们非常感谢您的帮助。
谢谢。
答案 0 :(得分:2)
当您致电Timber#plant
时,它会将新树添加到列表中。然后在每个Timber#d
上,它向该列表中的所有树发送消息。因此,要解决此问题,您只需在应用程序类中调用plant