diff --git a/app/build.gradle b/app/build.gradle index d3827dd..07590c3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,6 +21,15 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } } dependencies { @@ -30,6 +39,9 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation "androidx.recyclerview:recyclerview:1.1.0" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0" + testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' diff --git a/app/src/main/java/tw/andyang/kotlinandroidworkshop/MainActivity.kt b/app/src/main/java/tw/andyang/kotlinandroidworkshop/MainActivity.kt index 42fe1e7..8c4f46f 100644 --- a/app/src/main/java/tw/andyang/kotlinandroidworkshop/MainActivity.kt +++ b/app/src/main/java/tw/andyang/kotlinandroidworkshop/MainActivity.kt @@ -2,14 +2,13 @@ package tw.andyang.kotlinandroidworkshop import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.* import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { - private var todos = listOf() - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) @@ -19,17 +18,14 @@ class MainActivity : AppCompatActivity() { recyclerView.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) recyclerView.addItemDecoration(DividerItemDecoration(this, LinearLayoutManager.VERTICAL)) - todos = todos.toMutableList().apply { - add(Todo.Title(getString(R.string.todo_list_title))) - } + val todoViewModel = ViewModelProvider(this).get() - adapter.submitList(todos) + todoViewModel.todoLiveData.observe(this, Observer { todos: List -> + adapter.submitList(todos) + }) buttonAdd.setOnClickListener { - todos = todos.toMutableList().apply { - add(Todo.Item("world", false)) - } - adapter.submitList(todos) + todoViewModel.onNewTodo.postValue(Unit) } } } \ No newline at end of file diff --git a/app/src/main/java/tw/andyang/kotlinandroidworkshop/TodoViewModel.kt b/app/src/main/java/tw/andyang/kotlinandroidworkshop/TodoViewModel.kt new file mode 100644 index 0000000..fdfab8b --- /dev/null +++ b/app/src/main/java/tw/andyang/kotlinandroidworkshop/TodoViewModel.kt @@ -0,0 +1,22 @@ +package tw.andyang.kotlinandroidworkshop + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MediatorLiveData +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel + +class TodoViewModel : ViewModel() { + + val onNewTodo = MutableLiveData() + + val todoLiveData: LiveData> = MediatorLiveData>().apply { + addSource(onNewTodo) { + val todo = Todo.Item("note $count", false) + this.value = this.value!! + listOf(todo) + count++ + } + value = mutableListOf(Todo.Title("This is a title")) + } + + private var count = 0 +} \ No newline at end of file