Я изменяю фрагменты с анимацией, проводя по экрану вправо или влево.Вот родительский фрагмент:
class StatsFragment: Fragment() {
private lateinit var tvSortCategories: TextView
private lateinit var tvSortMonths: TextView
private var x: Float? = null
private val fragmentStatsCat = StatsCategoryFragment()
private val fragmentStatsMon = StatsMonthFragment()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view: View = inflater.inflate(R.layout.fragment_stats, container, false)
tvSortCategories = view.findViewById(R.id.tvStatsCategories)
tvSortMonths = view.findViewById(R.id.tvStatsMonths)
tvSortCategories.isSelected = true
tvSortCategories.setOnClickListener {
inflateCategory()
}
tvSortMonths.setOnClickListener {
inflateMonth()
}
childFragmentManager.beginTransaction()
.replace(R.id.stats_container, fragmentStatsCat)
.commit()
view.setOnTouchListener {_, event ->
when(event.action) {
MotionEvent.ACTION_DOWN -> {
x = event.x
}
MotionEvent.ACTION_MOVE -> {
if(x != null) {
val dx = event.x - x!!
if(dx > 200f) {
inflateCategory()
x = event.x
}
if (dx < -200f) {
inflateMonth()
x = event.x
}
}
}
}
true
}
return view
}
private fun inflateCategory() {
tvSortCategories.isSelected = true
tvSortMonths.isSelected = false
childFragmentManager.beginTransaction()
.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right)
.replace(R.id.stats_container, fragmentStatsCat)
.commit()
}
private fun inflateMonth() {
tvSortCategories.isSelected = false
tvSortMonths.isSelected = true
childFragmentManager.beginTransaction()
.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left)
.replace(R.id.stats_container, fragmentStatsMon)
.commit()
}
}
Это прекрасно работает, но с одним исключением.Когда я выполняю fragTransaction, пока старый фрагментTransaction не закончил, он вылетает с «java.lang.IllegalStateException»: «Restarter должен быть создан только на этапе инициализации владельца»
Есть ли способ проверитьесли старая транзакция закончилась перед выполнением новой?
РЕДАКТИРОВАТЬ: Чтобы объяснить, что именно я хочу сделать:
![Child Fragment 1](https://i.stack.imgur.com/G7deS.jpg)
![Child Fragment 2](https://i.stack.imgur.com/u52RP.jpg)
Я хочу переключиться между этими двумя дочерними фрагментами, проведя пальцем по экрану к другому фрагменту или нажав «Сортировать по категориям / месяцам».