为什么在移植到Kotlin后视图可见性更改为“消失”?

hec6srdp  于 2023-01-05  发布在  Kotlin
关注(0)|答案(1)|浏览(119)

我在下面的代码中使用根布局添加和删除自定义对话框

fun addToRoot(view: View) {
    (findViewById<View>(android.R.id.content) as ViewGroup).addView(view)
}

删除视图

fun removeFromRoot(view: View) {
    (findViewById<View>(android.R.id.content) as ViewGroup).removeView(view)
}

视图第一次显示正常,但第二次调用addToRoot时,我需要将视图可见性设置为VISIBLE,因为它在被删除后消失了。考虑到这是我在Java中使用的相同代码,这是如何发生的,我刚刚迁移到Kotlin,不得不发现第二次调用时视图不显示的bug。

bwntbbo3

bwntbbo31#

我怀疑你发布的代码是否使视图变成了gone。如果我们将代码反编译为Java,我们会看到以下内容:

public final void addToRoot(@NotNull View view) {
      Intrinsics.checkNotNullParameter(view, "view");
      View var10000 = this.findViewById(16908290);
      if (var10000 == null) {
         throw new NullPointerException("null cannot be cast to non-null type android.view.ViewGroup");
      } else {
         ((ViewGroup)var10000).addView(view);
      }
   }

   public final void removeFromRoot(@NotNull View view) {
      Intrinsics.checkNotNullParameter(view, "view");
      View var10000 = this.findViewById(16908290);
      if (var10000 == null) {
         throw new NullPointerException("null cannot be cast to non-null type android.view.ViewGroup");
      } else {
         ((ViewGroup)var10000).removeView(view);
      }
   }

我猜这看起来与忽略Kotlin引入的检查的Java代码非常相似。

相关问题