diff --git a/README.md b/README.md index 427107e..8a3c346 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,18 @@ # android_study_14_1 아롬 안드로이드 14기 스터디 1번 +# ToDo +|내용|완료 여부| +|---|:---:| +|MVVM 학습하기|✅| +|ㄴMVVM 코드 구현|✅| +|StateFlow 학습하기|✅| +|ㄴStateFlow 코드 구현|✅| +|SharedPreferences 이용한 저장 기능 구현|✅| +|Repository 학습하기|| + + +# 과제 설명 ### 간단하게 메모하고 저장, 불러오는 앱을 만들어봅시다. 단) mvvm + stateflow를 이용해서! diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e86faf7..182cca7 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -7,6 +7,8 @@ android { namespace = "com.alom.androidstudy1" compileSdk = 34 + viewBinding.isEnabled = true + defaultConfig { applicationId = "com.alom.androidstudy1" minSdk = 26 @@ -42,4 +44,5 @@ dependencies { testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) + implementation(libs.androidx.lifecycle.runtime.ktx) } \ No newline at end of file diff --git a/app/src/main/java/com/alom/androidstudy1/MainActivity.kt b/app/src/main/java/com/alom/androidstudy1/MainActivity.kt index c1bcbbf..95f2321 100644 --- a/app/src/main/java/com/alom/androidstudy1/MainActivity.kt +++ b/app/src/main/java/com/alom/androidstudy1/MainActivity.kt @@ -1,20 +1,63 @@ package com.alom.androidstudy1 import android.os.Bundle +import android.view.View +import android.view.View.OnClickListener +import android.widget.Toast import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle +import com.alom.androidstudy1.databinding.ActivityMainBinding +import kotlinx.coroutines.launch -class MainActivity : AppCompatActivity() { +class MainActivity : AppCompatActivity(),OnClickListener { + private lateinit var memoViewModel : MemoViewModel + private lateinit var binding:ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() - setContentView(R.layout.activity_main) + + //뷰바인딩 적용 + binding = ActivityMainBinding.inflate(layoutInflater) + setContentView(binding.root) + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) insets } + + //ViewModel + memoViewModel = ViewModelProvider(this).get(MemoViewModel::class.java) + + //버튼 리스너 설정 + binding.button.setOnClickListener(this) + + lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.STARTED) { + launch { + memoViewModel.currentText.collect{ + //EditText Text를 SharedPreferences에서 불러온 글자로 변경 + binding.editTextTextMultiLine.setText(it) + } + } + } + } + } + + override fun onResume() { + super.onResume() + + memoViewModel.returnMemo(applicationContext) + } + + override fun onClick(view: View?) { + //SharedPreference 저장 함수 호출 + memoViewModel.saveMemo(binding.editTextTextMultiLine.text.toString(),applicationContext) } } \ No newline at end of file diff --git a/app/src/main/java/com/alom/androidstudy1/MemoViewModel.kt b/app/src/main/java/com/alom/androidstudy1/MemoViewModel.kt new file mode 100644 index 0000000..1474065 --- /dev/null +++ b/app/src/main/java/com/alom/androidstudy1/MemoViewModel.kt @@ -0,0 +1,27 @@ +package com.alom.androidstudy1 + +import android.content.Context +import android.content.SharedPreferences +import android.widget.Toast +import androidx.lifecycle.ViewModel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow + +class MemoViewModel : ViewModel(){ + val _currentText = MutableStateFlow("") + val currentText:StateFlow = _currentText + + fun returnMemo(context: Context){ + val pref:SharedPreferences = context.getSharedPreferences("pref",Context.MODE_PRIVATE) + _currentText.value = pref.getString("content","")!! + } + + fun saveMemo(content:String,context: Context){ + _currentText.value = content + + val pref:SharedPreferences = context.getSharedPreferences("pref",Context.MODE_PRIVATE) + pref.edit().putString("content",content).apply() + + Toast.makeText(context,"메모가 저장되었습니다",Toast.LENGTH_LONG).show() + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 86a5d97..24ec4d6 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -7,13 +7,36 @@ android:layout_height="match_parent" tools:context=".MainActivity"> - + + + + + + +