切换按钮动画在抽屉导航视图中不起作用

Switch button animation doesn't work in Drawer Navigation View

在花了很多时间没有找到合适的解决方案后,我决定求助于此服务。
我有一个 the simplest application that implements Drawer 的例子。此示例仅包含没有任何实现的菜单项。在菜单项 Share 中,我添加了一个 Switch 和一个监听器:

main_nav.xml

<item
    android:id="@+id/nav_share"
    android:icon="@drawable/ic_menu_share"
    app:actionViewClass="androidx.appcompat.widget.SwitchCompat"
    android:title="@string/menu_share" />

MainActivity.kt

  val menuItem = navigation_view.menu.findItem(R.id.nav_share)
  val switch_id = menuItem.actionView as SwitchCompat
  switch_id.isChecked = true
  switch_id.setOnClickListener {
   // TODO: empty scope
  }

开关运行流畅,动画如下所示:

但现在我需要关闭主菜单项 如果开关关闭:

switch_id.setOnClickListener {
     navigation_view.menu.findItem(R.id.nav_home).isEnabled = switch_id.isChecked
}

添加此行后,我的 Switch 动画中断

我花了两天时间解决了这个问题,最后无果。

我的问题: WTF 与 android 菜单在 2021 年?为什么访问菜单项会破坏动画,我该如何解决?如果有任何帮助,我将不胜感激!!

我在 Android Tracker 中用这个问题创建了一个 issue 并得到了答案:

Either way, this is likely to be a non-trivial fix for an issue that is not a regression and not impacting correctness of the UI. At this time, we have no plans to address the issue.

然后建议了一个解决方法:

Something along the lines of adding a setOnCheckedChangeListener that posts a delayed Runnable to effect the change. I'd recommend asking on Whosebug if you need a detailed example.

E.g. How to delay "runOnUiThread" in android?

我添加了一个 postDelay(200),切换动画效果很好:

switch.setOnCheckedChangeListener { _, isChecked ->
     Handler(Looper.getMainLooper()).postDelayed({
         navigationView.menu.findItem(R.id.nav_home).isEnabled = isChecked
     }, 200)
}