onCreate在每次调用startActivity时调用多个增量时间的新活动

时间:2018-02-19 15:04:21

标签: android kotlin

我正在开发一个在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方法的次数一样多)。

我们非常感谢您的帮助。

谢谢。

1 个答案:

答案 0 :(得分:2)

当您致电Timber#plant时,它会将新树添加到列表中。然后在每个Timber#d上,它向该列表中的所有树发送消息。因此,要解决此问题,您只需在应用程序类中调用plant