应用程序不断崩溃,Logcat状态"lateinit property todoAdapter has not been initialized"



这是一个简单的待办事项列表应用程序的主要活动,如果你想看到更多的代码,那么请告诉我

当private lateinit var todoAdapter: todoAdapter被移除时,应用程序不再崩溃,但应用程序将不再在回收器视图上显示待办事项

"package com.example.todoit
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.TextUtils
import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager
import com.example.todoit.data.Todo
import com.example.todoit.data.TodoViewModel
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
private lateinit var todoAdapter: TodoAdapter
private lateinit var todoViewModel: TodoViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

rvTodoItems.layoutManager = LinearLayoutManager(this)
rvTodoItems.adapter = todoAdapter
btnAddTodo.setOnClickListener {
val todoTitle = etTodoTitle.text.toString()
if (todoTitle.isNotEmpty()) {
val todo = Todo(0,todoTitle,false)
etTodoTitle.text.clear()
insertDataToDataBase()
todoAdapter.addTodo(todo)
}
}
btnDeleteTodo.setOnClickListener {
todoAdapter.deleteDoneTodos()
}
}
private fun insertDataToDataBase() {
val todoTitle = etTodoTitle.text.toString()
if(inputCheck(todoTitle)) {
val todo = Todo(0, todoTitle, isChecked = false)
//Add data to database
todoViewModel.addTodoToDataBase(todo)
Toast.makeText(this, "Successfully Added", Toast.LENGTH_LONG).show()
}else{
Toast.makeText(this, "Please fill out all fields", Toast.LENGTH_LONG).show()
}
}


private fun inputCheck(todoTitle:String):Boolean {
return !(TextUtils.isEmpty(todoTitle))
}
}

如果您忘记初始化todoAdapter,则需要在调用todoAdapter之前初始化它。

class MainActivity : AppCompatActivity() {
private lateinit var todoAdapter: TodoAdapter
private lateinit var todoViewModel: TodoViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
todoAdapter = TodoAdapter() // if TodoAdapter requires parameters you need to pass them
rvTodoItems.layoutManager = LinearLayoutManager(this)
rvTodoItems.adapter = todoAdapter
btnAddTodo.setOnClickListener {
val todoTitle = etTodoTitle.text.toString()
if (todoTitle.isNotEmpty()) {
val todo = Todo(0,todoTitle,false)
etTodoTitle.text.clear()
insertDataToDataBase()
todoAdapter.addTodo(todo)
}
}
btnDeleteTodo.setOnClickListener {
todoAdapter.deleteDoneTodos()
}
}
private fun insertDataToDataBase() {
val todoTitle = etTodoTitle.text.toString()
if(inputCheck(todoTitle)) {
val todo = Todo(0, todoTitle, isChecked = false)
//Add data to database
todoViewModel.addTodoToDataBase(todo)
Toast.makeText(this, "Successfully Added", Toast.LENGTH_LONG).show()
}else{
Toast.makeText(this, "Please fill out all fields", Toast.LENGTH_LONG).show()
}
}


private fun inputCheck(todoTitle:String):Boolean {
return !(TextUtils.isEmpty(todoTitle))
}
}

错误清除您的todoAdapter未初始化,您必须在使用之前初始化:

todoAdapter=TodoAdapter(yourprams) 

rvTodoItems.layoutManager = LinearLayoutManager(this)
rvTodoItems.adapter = todoAdapter
btnAddTodo.setOnClickListener {
val todoTitle = etTodoTitle.text.toString()
if (todoTitle.isNotEmpty()) {
val todo = Todo(0,todoTitle,false)
etTodoTitle.text.clear()
insertDataToDataBase()
todoAdapter.addTodo(todo)
}
}
btnDeleteTodo.setOnClickListener {
todoAdapter.deleteDoneTodos()
}
}

相关内容

最新更新