这可能有点晚了,但是我想将其添加到上面的答案中:这取决于您在 OnClickListener 中做什么,假设您引用的是片段父级的 Activity 并且您为片段内的视图重新设置此 OnClickListener 则您可能需要删除您的引用,否则您有泄漏内存的风险:
onSettingsHeaderMenuItemClickedListener = View.OnClickListener {
GuidedStepSupportFragment.add(requireActivity().supportFragmentManager, SettingsFragment.newInstance(), android.R.id.content)
}
例如,上面的代码引用了父activity内部的fragment manager,并且发生在一个fragment中,所以这个引用必须被清除,否则它会将整个activity和fragment一起泄漏!
我更喜欢使用我可以从Google architecture components sample中挑选的 autoCleared 委托来解决这个问题。
因此,当在片段内并需要来自活动的引用时,单击侦听器的整个实现将类似于以下代码:
class SomeFragment{
private var onSettingsHeaderMenuItemClickedListener by autoCleared<View.OnClickListener>()
fun onViewCreated(){
onSomethingItemClickedListener = View.OnClickListener {
GuidedStepSupportFragment.add(requireActivity().supportFragmentManager, SettingsFragment.newInstance(), android.R.id.content)
}
findViewById<View>(R.id.header_item_settings).setOnClickListener(onSettingsHeaderMenuItemClickedListener)
}
}