gpt4 book ai didi

android - kotlin和正确声明变量

转载 作者:行者123 更新时间:2023-12-02 12:40:02 26 4
gpt4 key购买 nike

我最近从Java转到了kotlin。我在管理变量时遇到了一些麻烦。例如,在Java中,我可以轻松地在类的开头将变量声明为

private Window window
然后在设置 View 时,我可以通过使用来初始化window变量
window = activity.getWindow();

// clear FLAG_TRANSLUCENT_STATUS flag:
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

// add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

// finally change the color
window.setStatusBarColor(ContextCompat.getColor(activity,R.color.my_statusbar_color));
最后,如果我想要或需要,可以在类中的任何时候再次更改状态栏颜色,只需调用
window.setStatusBarColor
在Kotlin中,这种方法无效。无论我以哪种方式在顶部即声明变量。
private var window: Window? = activity?.window
private lateinit var window: Window
private war window: Window? = null
无论我在以后尝试在类中的方法中设置状态栏颜色时如何声明它,窗口始终为null。
有人可以提供一些解释,说明为什么会发生这种情况以及如何实现与Java中类似的功能。

最佳答案

在Java代码中,有两行相关性:字段的声明(private Window window;)和对该字段的值分配(window = activity.getWindow();)。
在您的Kotlin代码变体中:

  • 第一个(private var window: Window? = activity?.window)在同一语句中具有声明和赋值。如果activity不是nullactivity?.window不是null,这很好。对于您而言,显然是由于某些Android计时问题所致。
  • 第二个(private lateinit var window: Window)没有赋值,也没有证据表明您稍后会为其赋值。
  • 第三个是错字校正(private var window: Window? = null)后有一个赋值,但值是null。没有证据表明您以后会为其分配一个非null值。

  • 我建议您使用第三种方法,但是将与Java代码中相同的分配放在Kotlin代码中的相同位置:
    window = activity?.window
    大概,您的Java代码在适当的时机上具有它。

    关于android - kotlin和正确声明变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63648449/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com