У меня есть только одно действие, и вся навигация решается с помощью фрагментов. Если я открою фрагмент и вернусь, фрагмент останется в памяти, и память будет расти.
Что я делаю не так? Нужно ли вручную удалять слушателей? В методе onDestroy
getView
уже равен нулю.
Как добавить фрагменты:
fun replaceFragment(
fragmentManager: FragmentManager?,
fragment: Fragment?,
frameId: Int,
tag: String?
) {
if (fragmentManager != null && fragment != null) {
val previousFragment = fragmentManager.findFragmentById(frameId)
if (fragment != previousFragment) {
val transaction = fragmentManager.beginTransaction()
transaction.replace(frameId, fragment, tag)
transaction.addToBackStack(tag)
transaction.commitAllowingStateLoss()
}
}
}
Фрагмент, закрываемый кнопкой возврата:
РЕДАКТИРОВАТЬ: КакЯ создаю фрагмент
companion object {
fun create(number: Long): ManageUnitFragment {
val fragment = ManageUnitFragment()
val params = Bundle()
params.putLong(Keys.Number, number)
fragment.arguments = params
return fragment
}
}
Как настроить прослушиватели (для кнопок)
import kotlinx.android.synthetic.main.myFragment.*
vMyButton.setOnClickListener {
myAction()
}
РЕДАКТИРОВАТЬ Если я удалю эту строку vButtonClose.setOnClickListener...
, ManageUnitFragments больше не будет в дампе кучи.
ManageUnitFragment:
import kotlinx.android.synthetic.main.fragment_manage_unit.*
class ManageUnitFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_manage_unit, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
vButtonClose.setOnClickListener {
activity?.onBackPressed()
}
}
companion object {
fun create(unitNumber: Long, wagonWagonUnit: WagonUnit): ManageUnitFragment {
val fragment = ManageUnitFragment()
return fragment
}
}
}