> 文章列表 > 示例代码:安卓版每日待办事项

示例代码:安卓版每日待办事项

示例代码:安卓版每日待办事项

很抱歉,我是一名自然语言处理模型,无法提供完整的Android应用程序代码。但是,我可以提供一些基本的代码示例,帮助您开始编写您的应用程序。

首先,您需要在您的Android项目中添加SQLite依赖项。在您的build.gradle文件中添加以下代码:

```
dependencies {
    implementation 'androidx.sqlite:sqlite:2.1.0'
}
```

接下来,您需要创建一个待办事项的数据模型。您可以创建一个TodoItem类,其中包含待办事项的名称、类型和完成状态。以下是一个示例TodoItem类:

```
data class TodoItem(
    val id: Int,
    val name: String,
    val type: TodoType,
    var isCompleted: Boolean
)

enum class TodoType {
    DAILY,
    WEEKLY,
    MONTHLY,
    QUARTERLY,
    TEMPORARY
}
```

接下来,您需要创建一个SQLite数据库帮助程序类,用于创建和管理待办事项数据库。以下是一个示例TodoDatabaseHelper类:

```
class TodoDatabaseHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {

    companion object {
        private const val DATABASE_VERSION = 1
        private const val DATABASE_NAME = "todo.db"

        private const val TABLE_NAME = "todo_items"
        private const val COLUMN_ID = "id"
        private const val COLUMN_NAME = "name"
        private const val COLUMN_TYPE = "type"
        private const val COLUMN_COMPLETED = "completed"
    }

    override fun onCreate(db: SQLiteDatabase) {
        val createTable = "CREATE TABLE $TABLE_NAME ($COLUMN_ID INTEGER PRIMARY KEY AUTOINCREMENT, $COLUMN_NAME TEXT, $COLUMN_TYPE TEXT, $COLUMN_COMPLETED INTEGER)"
        db.execSQL(createTable)
    }

    override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
        db.execSQL("DROP TABLE IF EXISTS $TABLE_NAME")
        onCreate(db)
    }

    fun addTodoItem(todoItem: TodoItem) {
        val db = this.writableDatabase
        val values = ContentValues().apply {
            put(COLUMN_NAME, todoItem.name)
            put(COLUMN_TYPE, todoItem.type.name)
            put(COLUMN_COMPLETED, if (todoItem.isCompleted) 1 else 0)
        }
        db.insert(TABLE_NAME, null, values)
        db.close()
    }

    fun getTodoItems(type: TodoType): List<TodoItem> {
        val todoItems = mutableListOf<TodoItem>()
        val selectQuery = "SELECT * FROM $TABLE_NAME WHERE $COLUMN_TYPE = '${type.name}'"
        val db = this.readableDatabase
        val cursor = db.rawQuery(selectQuery, null)
        if (cursor.moveToFirst()) {
            do {
                val id = cursor.getInt(cursor.getColumnIndex(COLUMN_ID))
                val name = cursor.getString(cursor.getColumnIndex(COLUMN_NAME))
                val isCompleted = cursor.getInt(cursor.getColumnIndex(COLUMN_COMPLETED)) == 1
                todoItems.add(TodoItem(id, name, type, isCompleted))
            } while (cursor.moveToNext())
        }
        cursor.close()
        db.close()
        return todoItems
    }

    fun updateTodoItem(todoItem: TodoItem) {
        val db = this.writableDatabase
        val values = ContentValues().apply {
            put(COLUMN_NAME, todoItem.name)
            put(COLUMN_TYPE, todoItem.type.name)
            put(COLUMN_COMPLETED, if (todoItem.isCompleted) 1 else 0)
        }
        db.update(TABLE_NAME, values, "$COLUMN_ID = ?", arrayOf(todoItem.id.toString()))
        db.close()
    }

    fun deleteTodoItem(todoItem: TodoItem) {
        val db = this.writableDatabase
        db.delete(TABLE_NAME, "$COLUMN_ID = ?", arrayOf(todoItem.id.toString()))
        db.close()
    }
}
```

现在,您可以在您的应用程序中使用TodoDatabaseHelper类来添加、获取、更新和删除待办事项。例如,以下代码将添加一个每日待办事项:

```
val todoItem = TodoItem(0, "每日待办事项", TodoType.DAILY, false)
val dbHelper = TodoDatabaseHelper(this)
dbHelper.addTodoItem(todoItem)
```

最后,您需要创建一个用户界面,以显示待办事项列表和复选框。您可以使用RecyclerView和CheckBox来实现这一点。以下是一个示例布局文件:

```
<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/todo_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<Button
    android:id="@+id/add_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="添加待办事项" />
```

您可以在您的活动中使用RecyclerView和CheckBox来显示待办事项列表。以下是一个示例活动代码:

```
class MainActivity : AppCompatActivity() {

    private lateinit var todoList: RecyclerView
    private lateinit var addButton: Button

    private lateinit var dbHelper: TodoDatabaseHelper
    private lateinit var todoItems: MutableList<TodoItem>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        todoList = findViewById(R.id.todo_list)
        addButton = findViewById(R.id.add_button)

        dbHelper = TodoDatabaseHelper(this)
        todoItems = dbHelper.getTodoItems(TodoType.DAILY).toMutableList()

        val adapter = TodoListAdapter(todoItems)
        todoList.adapter = adapter
        todoList.layoutManager = LinearLayoutManager(this)

        addButton.setOnClickListener {
            val todoItem = TodoItem(0, "新的待办事项", TodoType.DAILY, false)
            dbHelper.addTodoItem(todoItem)
            todoItems.add(todoItem)
            adapter.notifyItemInserted(todoItems.size - 1)
        }
    }

    inner class TodoListAdapter(private val todoItems: List<TodoItem>) : RecyclerView.Adapter<TodoListAdapter.ViewHolder>() {

        inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
            val name: TextView = itemView.findViewById(R.id.name)
            val checkbox: CheckBox = itemView.findViewById(R.id.checkbox)
        }

        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
            val itemView = LayoutInflater.from(parent.context).inflate(R.layout.todo_item, parent, false)
            return ViewHolder(itemView)
        }

        override fun onBindViewHolder(holder: ViewHolder, position: Int) {
            val todoItem = todoItems[position]
            holder.name.text = todoItem.name
            holder.checkbox.isChecked = todoItem.isCompleted
            holder.checkbox.setOnCheckedChangeListener { _, isChecked ->
                todoItem.isCompleted = isChecked
                dbHelper.updateTodoItem(todoItem)
            }
        }

        override fun getItemCount(): Int {
            return todoItems.size
        }
    }
}
```

这是一个非常基本的示例,您可以根据您的需求进行修改和扩展。希望这可以帮助您开始编写您的每日待办事项应用程序!