diff --git a/.gradle/config.properties b/.gradle/config.properties
new file mode 100644
index 0000000..76e9d26
--- /dev/null
+++ b/.gradle/config.properties
@@ -0,0 +1,2 @@
+#Tue Nov 26 00:44:34 KST 2024
+java.home=C\:\\Program Files\\Android\\Android Studio1\\jbr
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..99b49d3
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+assignment02
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000..12dd8a9
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,184 @@
+
+
+
+
+
+
+
+
+
+ @style/Theme.Assignment02
+
+
+
+
+ @style/Theme.Assignment02
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {
+ "keyToString": {
+ "RunOnceActivity.OpenProjectViewOnStart": "true",
+ "RunOnceActivity.ShowReadmeOnStart": "true",
+ "RunOnceActivity.cidr.known.project.marker": "true",
+ "cf.first.check.clang-format": "false",
+ "cidr.known.project.marker": "true",
+ "last_directory_selection": "C:/Users/Public/assignment02/app/src/main/java",
+ "last_opened_file_path": "C:/Users/Public/assignment02/app/src/main/res/layout",
+ "settings.editor.selected.configurable": "AndroidSdkUpdater"
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1731406527910
+
+
+ 1731406527910
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 166076e..25059fe 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -5,7 +5,7 @@ plugins {
android {
namespace = "com.example.assignment02"
- compileSdk = 34
+ compileSdk = 35
defaultConfig {
applicationId = "com.example.assignment02"
@@ -36,11 +36,11 @@ android {
}
dependencies {
- implementation("androidx.activity:activity-ktx:1.7.0")
- implementation("androidx.core:core-ktx:1.13.1")
+
+ implementation("androidx.core:core-ktx:1.15.0")
implementation("androidx.appcompat:appcompat:1.7.0")
implementation("com.google.android.material:material:1.12.0")
- implementation("androidx.constraintlayout:constraintlayout:2.1.4")
+ implementation("androidx.constraintlayout:constraintlayout:2.2.0")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.2.1")
androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1")
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c9ef4a9..bd2b54d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -21,7 +21,6 @@
-
\ No newline at end of file
diff --git a/app/src/main/java/com/example/assignment02/MainActivity.kt b/app/src/main/java/com/example/assignment02/MainActivity.kt
index acbfa04..2b7dda6 100644
--- a/app/src/main/java/com/example/assignment02/MainActivity.kt
+++ b/app/src/main/java/com/example/assignment02/MainActivity.kt
@@ -1,42 +1,73 @@
package com.example.assignment02
-import android.app.Activity
-import android.content.Intent
-import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
-import android.widget.TextView
-import android.widget.Toast
-import androidx.activity.result.contract.ActivityResultContracts
+import android.widget.Button
+import android.widget.EditText
+import androidx.appcompat.app.AlertDialog
+import androidx.appcompat.app.AppCompatActivity
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
class MainActivity : AppCompatActivity() {
+
+ val nameList = mutableListOf()
+
+ lateinit var name_text: EditText
+ lateinit var recycler_view: RecyclerView
+ lateinit var nameAdapter: NameAdapter
+ lateinit var add_button: Button
+
override fun onCreate(savedInstanceState: Bundle?) {
+ // 포크용 변경
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
- val number_text: TextView = findViewById(R.id.number_text)
- val count_btn: TextView = findViewById(R.id.count_btn)
- val toast_btn: TextView = findViewById(R.id.toast_btn)
- val random_btn: TextView = findViewById(R.id.random_btn)
- val intent = Intent(this, RandomActivity::class.java)
-
- val resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
- if (result.resultCode == Activity.RESULT_OK) {
- number_text.text = result.data?.getIntExtra("random_number", 0).toString()
- Toast.makeText(this, "OK", Toast.LENGTH_SHORT).show()
+
+ name_text = findViewById(R.id.name_text)
+ recycler_view = findViewById(R.id.recycler_view)
+ nameAdapter = NameAdapter(nameList) { position ->showDeleteDialog(position)}
+ add_button = findViewById(R.id.add_button)
+
+ recycler_view.layoutManager = LinearLayoutManager(this)
+ recycler_view.adapter = nameAdapter
+
+ add_button.setOnClickListener {
+ nameList.add(name_text.text.toString())
+ nameAdapter.notifyItemInserted(nameList.size - 1)
+ name_text.setText("")
+ }
+ }
+
+ private fun showDeleteDialog(position: Int) {
+ AlertDialog.Builder(this)
+ .setTitle("이름 목록 삭제하기")
+ .setMessage("이름 목록을 삭제해보자.")
+ .setPositiveButton("확인") { dialog, _ ->
+ showEditDialog(position)
+ dialog.dismiss()
}
- else {
- Toast.makeText(this, "오류", Toast.LENGTH_SHORT).show()
+ .setNegativeButton("취소") { dialog, _ ->
+ dialog.dismiss()
}
+ .create()
+ .show()
+ }
+ private fun showEditDialog(position: Int) {
+ val editText = EditText(this).apply {
+ hint = "수정할 이름을 입력하세요."
+ setText("")
}
- count_btn.setOnClickListener {
- number_text.text = (number_text.text.toString().toInt()+1).toString()
- }
- toast_btn.setOnClickListener {
- Toast.makeText(this, "숫자 : "+number_text.text, Toast.LENGTH_LONG).show()
- }
- random_btn.setOnClickListener {
- intent.putExtra("number", number_text.text.toString().toInt())
- resultLauncher.launch(intent)
- }
+ AlertDialog.Builder(this)
+ .setTitle(" ")
+ .setView(editText)
+ .setPositiveButton("확인") { _, _ ->
+ nameList[position] = editText.text.toString()
+ nameAdapter.notifyItemChanged(position)
+ }
+ .setNegativeButton("취소") { dialog, _ ->
+ dialog.dismiss()
+ }
+ .create()
+ .show()
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/example/assignment02/NameAdapter.kt b/app/src/main/java/com/example/assignment02/NameAdapter.kt
new file mode 100644
index 0000000..140e95e
--- /dev/null
+++ b/app/src/main/java/com/example/assignment02/NameAdapter.kt
@@ -0,0 +1,32 @@
+package com.example.assignment02
+
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+
+class NameAdapter(
+ private val nameList: MutableList,
+ private val onItemClick: (Int) -> Unit
+) : RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NameViewHolder {
+ val view = LayoutInflater.from(parent.context)
+ .inflate(R.layout.adapter_name, parent, false)
+ return NameViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: NameViewHolder, position: Int) {
+ holder.name_text.text = nameList[position]
+ holder.itemView.setOnClickListener {
+ onItemClick(position)
+ }
+ }
+
+ override fun getItemCount(): Int = nameList.size
+
+ class NameViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val name_text: TextView = itemView.findViewById(R.id.name_text)
+ }
+}
diff --git a/app/src/main/java/com/example/assignment02/RandomActivity.kt b/app/src/main/java/com/example/assignment02/RandomActivity.kt
deleted file mode 100644
index 22307a7..0000000
--- a/app/src/main/java/com/example/assignment02/RandomActivity.kt
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.example.assignment02
-
-import android.content.Intent
-import android.os.Bundle
-import android.widget.TextView
-import androidx.appcompat.app.AppCompatActivity
-import kotlin.random.Random
-
-class RandomActivity : AppCompatActivity() {
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_random)
- val number_text: TextView = findViewById(R.id.number_text)
- val number = intent.getIntExtra("number", 1)
- val resultIntent = Intent()
-
- if (number > 0){
- val random_number = Random.nextInt(0, number) // 0부터 99까지의 랜덤 값
- number_text.text = random_number.toString()
- resultIntent.putExtra("random_number", random_number)
- setResult(RESULT_OK, resultIntent)
- } else {
- number_text.text = number.toString()
- resultIntent.putExtra("random_number", number)
- setResult(RESULT_OK, resultIntent)
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/round_button.xml b/app/src/main/res/drawable/round_button.xml
new file mode 100644
index 0000000..33561c3
--- /dev/null
+++ b/app/src/main/res/drawable/round_button.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ 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 0fb246d..9dfdf6d 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,52 +1,47 @@
-
-
+ android:layout_marginLeft="100dp"
+ android:layout_marginRight="100dp"
+ android:ems="10"
+ android:hint="새로운 이름을 추가하세요."
+ android:inputType="text" />
-
+
-
+
+ android:id="@+id/add_button"
+ android:layout_width="60dp"
+ android:layout_height="60dp"
+ android:layout_gravity="right"
+ android:layout_marginRight="10dp"
+ android:layout_marginBottom="10dp"
+ android:background="@drawable/round_button"
+ android:backgroundTint="#FF9800"
+ android:backgroundTintMode="add"
+ android:drawableTint="#FF5722"
+ android:drawableTintMode="add"
+ android:foregroundTint="#FF5722"
+ android:text="+"
+ android:textColorLink="#000000"
+ android:textSize="20sp"
+ app:iconTint="#FF5722" />
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_random.xml b/app/src/main/res/layout/activity_random.xml
deleted file mode 100644
index 3f6e6ae..0000000
--- a/app/src/main/res/layout/activity_random.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/adapter_name.xml b/app/src/main/res/layout/adapter_name.xml
new file mode 100644
index 0000000..0f5c960
--- /dev/null
+++ b/app/src/main/res/layout/adapter_name.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index c8524cd..efdb783 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -2,4 +2,5 @@
#FF000000
#FFFFFFFF
+ #FF5722
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 731cd98..b849030 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,4 +1,4 @@
-#Tue Nov 12 19:15:37 KST 2024
+#Tue Nov 26 00:44:39 KST 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip