Разработка Android-приложения для учета задач
НАВИГАЦИЯ ПО СТРАНИЦЕ
Для разработки Android-приложения с использованием Room Database и работы с RecyclerView вам потребуется создать проект, определить сущность для задач, настроить Room Database, создать адаптер для RecyclerView и реализовать соответствующий пользовательский интерфейс. Давайте создадим минимальный пример.
Добавление зависимостей :
В файле build.gradle вашего проекта добавьте зависимости:
dependencies {
implementation 'androidx.appcompat:appcompat:1.4.0'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'androidx.room:room-runtime:2.4.1'
kapt 'androidx.room:room-compiler:2.4.1'
}
Определение сущности Task :
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "tasks")
data class Task(
@PrimaryKey(autoGenerate = true)
val id: Long = 0,
val title: String,
val description: String
)
Создание интерфейса TaskDao :
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
@Dao
interface TaskDao {
@Query("SELECT * FROM tasks")
suspend fun getAllTasks(): List<Task>
@Insert
suspend fun insertTask(task: Task)
}
Создание класса TaskDatabase :
import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
@Database(entities = [Task::class], version = 1, exportSchema = false)
abstract class TaskDatabase : RoomDatabase() {
abstract fun taskDao(): TaskDao
companion object {
@Volatile
private var INSTANCE: TaskDatabase? = null
fun getDatabase(context: Context): TaskDatabase {
return INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
TaskDatabase::class.java,
"task_database"
).build()
INSTANCE = instance
instance
}
}
}
}
Создание адаптера для RecyclerView:
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
class TaskAdapter(private val tasks: List<Task>) : RecyclerView.Adapter<TaskAdapter.TaskViewHolder>() {
class TaskViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val titleTextView: TextView = itemView.findViewById(R.id.titleTextView)
val descriptionTextView: TextView = itemView.findViewById(R.id.descriptionTextView)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TaskViewHolder {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.task_item, parent, false)
return TaskViewHolder(itemView)
}
override fun onBindViewHolder(holder: TaskViewHolder, position: Int) {
val currentTask = tasks[position]
holder.titleTextView.text = currentTask.title
holder.descriptionTextView.text = currentTask.description
}
override fun getItemCount() = tasks.size
}
Создание макета для элемента списка (task_item.xml):
<!-- res/layout/task_item.xml -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/titleTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textSize="18sp"/>
<TextView
android:id="@+id/descriptionTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textSize="14sp"/>
</LinearLayout>
Создание MainActivity с RecyclerView:
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
class MainActivity : AppCompatActivity() {
private lateinit var recyclerView: RecyclerView
private lateinit var taskAdapter: TaskAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
recyclerView = findViewById(R.id.recyclerView)
recyclerView.layoutManager = LinearLayoutManager(this)
taskAdapter = TaskAdapter(emptyList())
recyclerView.adapter = taskAdapter
val taskDao = TaskDatabase.getDatabase(this).taskDao()
// Добавление тестовых данных
GlobalScope.launch(Dispatchers.IO) {
taskDao.insertTask(Task(title = "Task 1", description = "Description 1"))
taskDao.insertTask(Task(title = "Task 2", description = "Description 2"))
// Получение данных из базы данных
val tasks = taskDao.getAllTasks()
launch(Dispatchers.Main) {
taskAdapter = TaskAdapter(tasks)
recyclerView.adapter = taskAdapter
}
}
}
}
Создание макета для MainActivity (activity_main.xml):
<!-- res/layout/activity_main.xml -->
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="16dp"
android:paddingBottom="16dp"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
Этот пример создает простое Android-приложение для учета задач. Приложение использует Room Database для хранения задач и RecyclerView для отображения списка задач. Обратите внимание, что этот код предназначен для обучения и демонстрации, и в реальных проектах требуется обеспечение безопасности, обработка ошибок и другие улучшения.