android - 片段过渡导致崩溃
问题描述
我通过向右或向左滑动屏幕来更改带有动画的片段。这是父片段:
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()
}
}
这工作正常,但有一个例外。当我执行 fragmentTransaction 时,虽然旧的 fragmentTransaction 尚未完成,但它会因“java.lang.IllegalStateException”而崩溃:“必须仅在所有者的初始化阶段创建重新启动器”
有没有办法在执行新交易之前检查旧交易是否已完成?
编辑:进一步解释我到底想要做什么:
我想通过在屏幕上滑动到另一个片段或触摸“按类别/月份排序”来在这两个子片段之间进行更改。
解决方案
推荐阅读
- javascript - 如何在一定时间后删除不和谐机器人的角色?(Javascript)
- c# - 无法加载 DLL 'Microsoft.DiaSymReader.Native.amd64.dll
- python - 如何使用for循环和条件不规则地交错数据帧?
- twilio - 符合 Twilio PCI 标准
在带有 Studio 的函数小部件中 - android - WebView 中的 Google 安全搜索
- javascript - 如何使用 javascript/jquery 过滤数组中的数据?
- java - JAVA LDAP 错误 javax.naming.NamingException:[LDAP:错误代码 1 - 000004DC:LdapErr:DSID-0C09075A
- angular - 我的 GOIBIBO 航班搜索 API 无法正常工作
- php - 绕过限制从 Telegram Bot 发送 TXT 文件
- python - 如何以 16:9 的纵横比计算最接近的分辨率。蟒蛇 3