如何初始化lateinit变量?

时间:2019-12-30 05:15:24

标签: kotlin kotlin-lateinit

我正在尝试运行开源应用,在其中我收到错误消息

lateinit property textInput has not been initialized

使用textInput的主要代码

class MainActivity : BaseActivity() {

    private val drawerToggle by lazy { ActionBarDrawerToggle(this, drawer_layout, drawer_open, drawer_close) }

    private val survivalContent by lazy { SurvivalContent(assets) }

    private lateinit var currentUrl: String
    private lateinit var currentTopicName: String
    private lateinit var textInput: MutableList<String>


    private var lastFontSize = State.getFontSize()
    private var lastNightMode = State.nightModeString()
    private var lastAllowSelect = State.allowSelect()

    private val linearLayoutManager by lazy { LinearLayoutManager(this) }

    private var isInEditMode by observable(false, onChange = { _, _, newMode ->
        if (newMode) {
            fab.setImageResource(drawable.ic_image_remove_red_eye)
            contentRecycler.adapter = EditingRecyclerAdapter(textInput)
        } else {
            fab.setImageResource(drawable.ic_editor_mode_edit)
            contentRecycler.adapter = MarkdownRecyclerAdapter(textInput, imageWidth(), onURLClick)
        }

        contentRecycler.scrollToPosition(State.lastScrollPos)
    })

由于我是android开发的新手,所以在使用它之前我不打算如何初始化lateinit变量。在此之前,我尝试执行本github中提到的git submodule update,但是它没有没用。所以现在我希望问题在于初始化 textInput 变量。

2 个答案:

答案 0 :(得分:0)

使用textInput变量之前,必须对其进行初始化。 为此,您可以执行以下操作:

textInput = mutableListOf("Abc", "Xyz")

从docs中开始:在未初始化Lateinit属性之前,它会抛出一个特殊异常,该异常清楚地标识了正在访问的属性以及尚未初始化的事实。

了解更多:https://kotlinlang.org/docs/reference/properties.html#late-initialized-properties-and-variables

答案 1 :(得分:0)

执行此操作:

 private  var currentUrl: String =""
 private  var currentTopicName: String =""
 private  var textInput= mutableListOf<String>()

您可以使用lateinit做同样的事情,您真的不需要在这里使用。但是如果你 希望那么做。

private lateinit var currentUrl: String
private lateinit var currentTopicName: String
private lateinit var textInput: MutableList<String>

在onCreate()方法中,您只需初始化所有这些变量。

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    currentUrl = String()
    currentTopicName = String()
    textInput= mutableListOf()
}

让我知道是否需要更多帮助。