사용자 도구

사이트 도구


android:클래스와리스트를사용하기
클래스와리스트를사용하기

문서의 이전 판입니다!


간단한 투두앱을 만들어 보자

간단한 데이터 만들기

우리는 data class를 이용하여 Todo 데이터의 구조를 맏들 것이다.

그리고 이렇게 만든 데이터 클래스에 데이터를 다음과 같이 집어 넣어 보자

"Todo.kt
package com.dklaw.gogo2.database
 
import java.time.LocalDate
 
data class Todo(
    var id : Int,
    var title : String,
    var createdAt : LocalDateTime
)
 
fun getFakeTodo() : List<Todo> {
    return listOf<Todo>(
        Todo(1, "First todo", LocalDateTime.now()),
        Todo(2, "Seconde todo", LocalDateTime.now()),
        Todo(3, "Third todo", LocalDateTime.now()),
        Todo(4, "This is the last todo", LocalDateTime.now())
    )
}

화면에 출력하기

1. 간단하게 출력해보기

위의 제목과 만든 날짜를 화면에 간단하게 출력해보자

"TodoListPage.kt"
package com.dklaw.gogo2.pages
 
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.dklaw.gogo2.database.Todo
import com.dklaw.gogo2.database.getFakeTodo
import java.time.format.DateTimeFormatter
 
@Composable
fun ContactsPage() {
 
    val todoList = getFakeTodo()
 
    Column(modifier = Modifier
        .fillMaxHeight()
        .padding(8.dp))
    {
        LazyColumn(
            content = {
                itemsIndexed(todoList) {
                    index : Int, item : Todo ->
                    TodoItem(item = item)
                }
            }
        )
    }
}
 
@Composable
fun TodoItem(item : Todo) {
    val timeFormater : DateTimeFormatter = DateTimeFormatter.ofPattern("yyyy년 M월 d일 a h시 m분")
    val nowString = item.createdAt.format(timeFormater)
 
    Row {
        Column {
            Text(text = nowString)
            Text(text = item.title)
        }
    }
}

데이터 조작하기

1. Todo Manager

"TodoManager.kt"
package com.dklaw.gogo2.database
 
import java.time.LocalDateTime
 
object TodoManager {
 
    private val todoList = mutableListOf<Todo>()
 
    fun getAllTodo() : List<Todo>{
        return todoList
    }
 
    fun addTodo(title : String) {
        todoList.add(Todo(System.currentTimeMillis().toInt(), title, LocalDateTime.now()))
    }
 
    fun deleteTodo(id : Int) {
        todoList.removeIf{
            it.id == id
        }
    }
}

2. view 모델

Todo Manager에서 한 데이터 작업을 뷰모델에서 다시 가져온다.

"TodoViewModel.kt"
package com.dklaw.gogo2.database
 
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
 
class TodoViewModel: ViewModel() {
 
    private var _todoList = MutableLiveData<List<Todo>>()
    val todoList : LiveData<List<Todo>> = _todoList
 
    fun getAllTodo() {
        _todoList.value = TodoManager.getAllTodo()
    }
 
    fun addTodo(title : String) {
        TodoManager.addTodo(title)
        getAllTodo()
    }
 
    fun deleteTodo(id : Int) {
        TodoManager.deleteTodo(id)
        getAllTodo()
    }
}

뷰모델 동기화하기

1. 뷰모델을 상속하기

TodoListPage.kt 에서는 다음과 같이 뷰모델을 상속하여 뷰모델과 동기화할 준비를 한다.

@Composable
fun ContactsPage(viewModel: TodoViewModel) {
 
    val todoList by viewModel.todoList.observeAsState()
    var inputText by remember { mutableStateOf("") }

observeAsState()함수를 사용하려면 livedata 디펜던시를 build.gradle.kts(module :app)에 추가해야 한다.

implementation(“androidx.compose.runtime:runtime-livedata:1.6.8”)

2. 뷰모델 공급자 지정

다음과 같이 mainactivity에 공급자를 지정한다.

class MainActivity : ComponentActivity() {
 
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val todoViewModel = ViewModelProvider(this)[TodoViewModel::class.java]
 
        enableEdgeToEdge()
        setContent {
로그인하면 댓글을 남길 수 있습니다.

android/클래스와리스트를사용하기.1723125551.txt.gz · 마지막으로 수정됨: 2024/08/08 22:59 저자 이거니맨