Skip to content

Commit

Permalink
#22 TodoActivity 리팩토링
Browse files Browse the repository at this point in the history
  • Loading branch information
yellow-jam committed Sep 11, 2022
1 parent b00403c commit ca1a126
Show file tree
Hide file tree
Showing 4 changed files with 103 additions and 86 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class TodoAdapter (val datas: MutableList<TodoItem>?): RecyclerView.Adapter<Recy
val binding = (holder as TodoViewHolder).binding

binding.todowork.text = datas!![position].todowork
binding.todorole.text = datas!![position].todorole?.name ?: ""
binding.todorole.text = datas!![position].todorole!!.name ?: ""
binding.todotime.text = datas!![position].todotime.toString() + ""

// todoref: 시뮬레이션 텍스트로 치환
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.ArrayAdapter
import android.widget.Toast
import androidx.annotation.RequiresApi
Expand Down Expand Up @@ -54,10 +55,13 @@ class TodoActivity : AppCompatActivity() {
}
}

lateinit var binding: ActivityToDoBinding
lateinit var todoDialog: TodoAddBinding
lateinit var calendar: CalendarFragment
lateinit var familyFragment: FamilyFragment
lateinit var binding: ActivityToDoBinding // 액티비티 레이아웃 뷰 바인딩
lateinit var todoDialog: TodoAddBinding // 항목 추가 다이얼로그 뷰 바인딩
lateinit var calendar: CalendarFragment // 달력 프래그먼트
lateinit var familyFragment: FamilyFragment // 가족 목록 프래그먼트

lateinit var alert: AlertDialog // 항목 추가 다이얼로그

lateinit var family: MutableList<User> // 가족 데이터 배열
lateinit var nameArray : List<String> // todorole 담당자 드롭다운
lateinit var userIdArray : List<String> // todorole 담당자 드롭다운
Expand Down Expand Up @@ -88,110 +92,102 @@ class TodoActivity : AppCompatActivity() {
todoRecyclerView.layoutManager = layoutManager
adapter = TodoAdapter(datas) // 초기값 데이터 저장(2)
todoRecyclerView.adapter = adapter // 초기값 설정(3)
todoToday() // 오늘 날짜 투두리스트 요청(초기화)

val formatDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))
// 오늘 날짜에 해당하는 To-do 불러오기 (DB 요청)
val call: Call<GetTodoRes> = MyApplication.networkServiceTodo.getTodo( // familyID, yyyy-mm-dd
GetTodoReq(SaveSharedPreference.getFamliyID(this)!!, formatDate)
)
call?.enqueue(object : Callback<GetTodoRes> {
override fun onResponse(call: Call<GetTodoRes>, response: Response<GetTodoRes>) {
if(response.isSuccessful){
// 리사이클러뷰에 할 일 목록 표시
TodoActivity.updateTodoList((response.body()!!.todoInfo).toMutableList()) // Array<TodoItem>
}
}
override fun onFailure(call: Call<GetTodoRes>, t: Throwable) {
Log.d("mobileApp", "onFailure $t")
}
})
// 새 항목 추가 버튼 - 대화상자 열림
alert = AlertDialog.Builder(this)
.setTitle("TODO 추가")
.setView(todoDialog.root)
.setPositiveButton("저장", save)
.setNegativeButton("취소", save)
.create()

// 투두리스트 항목 추가 버튼 리스너
binding.todoAdd.setOnClickListener(addListener)

// 모달창에서 저장/취소 버튼 눌렀을 때 발생하는 이벤트
val save = object : DialogInterface.OnClickListener {
override fun onClick(p0: DialogInterface?, p1: Int) {
if (p1 == DialogInterface.BUTTON_POSITIVE) { // [저장] 버튼을 눌렀을 경우

val todoroleindex = todoDialog.todorole.selectedItemPosition
val todorefindex = todoDialog.todoref.selectedItemPosition
/* 화면 업데이트 */
// 새 입력값을 datas(리사이클러뷰 데이터 배열)(1)에 추가
datas?.add(
TodoItem(
todowork = todoDialog.todowork.text.toString(),
todorole = Todorole(nameArray[todoroleindex]),
todotime = todoDialog.todotime.text.toString().toInt(),
todoref = todorefindex
)
)
// 탭바 연결
setTabBar()
}

// 리사이클러뷰 업데이트
adapter.notifyItemInserted(adapter.itemCount)

/* DB에 추가 */
// 서버 요청 registerTodo
val call: Call<RegisterTodoRes> = MyApplication.networkServiceTodo.registerTodo(
RegisterTodoReq(
familyID = SaveSharedPreference.getFamliyID(this@TodoActivity)!!,
date = dateString,
todowork = todoDialog.todowork.text.toString(),
todorole = userIdArray[todoroleindex],
todotime = todoDialog.todotime.text.toString().toInt(),
todoref = todorefindex
)
// 모달창에서 저장/취소 버튼 눌렀을 때 발생하는 이벤트
val save = object : DialogInterface.OnClickListener {
override fun onClick(p0: DialogInterface?, p1: Int) {
if (p1 == DialogInterface.BUTTON_POSITIVE) { // [저장] 버튼을 눌렀을 경우

val todoroleindex = todoDialog.todorole.selectedItemPosition
val todorefindex = todoDialog.todoref.selectedItemPosition
/* 화면 업데이트 */
// 새 입력값을 datas(리사이클러뷰 데이터 배열)(1)에 추가
datas?.add(
TodoItem(
todowork = todoDialog.todowork.text.toString(),
todorole = Todorole(nameArray[todoroleindex]),
todotime = todoDialog.todotime.text.toString().toInt(),
todoref = todorefindex
)
call?.enqueue(object : Callback<RegisterTodoRes> {
override fun onResponse(call: Call<RegisterTodoRes>, response: Response<RegisterTodoRes>) {
if(response.isSuccessful){
Log.d("mobileApp", "registerTodo $response ${response.body()}")
}
}
override fun onFailure(call: Call<RegisterTodoRes>, t: Throwable) {
Log.d("mobileApp", "registerTodo onFailure $t")
Toast.makeText(this@TodoActivity, "등록 실패", Toast.LENGTH_SHORT).show()
)
// 리사이클러뷰 업데이트
adapter.notifyItemInserted(adapter.itemCount)

/* DB에 추가 */
// 서버 요청 registerTodo
val call: Call<RegisterTodoRes> = MyApplication.networkServiceTodo.registerTodo(
RegisterTodoReq(
familyID = SaveSharedPreference.getFamliyID(this@TodoActivity)!!,
date = dateString,
todowork = todoDialog.todowork.text.toString(),
todorole = userIdArray[todoroleindex],
todotime = todoDialog.todotime.text.toString().toInt(),
todoref = todorefindex
)
)
call?.enqueue(object : Callback<RegisterTodoRes> {
override fun onResponse(call: Call<RegisterTodoRes>, response: Response<RegisterTodoRes>) {
if(response.isSuccessful){
Log.d("mobileApp", "registerTodo $response ${response.body()}")
}
})
}
override fun onFailure(call: Call<RegisterTodoRes>, t: Throwable) {
Log.d("mobileApp", "registerTodo onFailure $t")
Toast.makeText(this@TodoActivity, "등록 실패", Toast.LENGTH_SHORT).show()
}
})

// 입력 폼(다이얼로그) 초기화 - null이 제출되면 오류남, 처리 필요
todoDialog.todowork.setText("")
todoDialog.todorole.setSelection(0)
todoDialog.todotime.setText("")
todoDialog.todoref.setSelection(0)
// 입력 폼(다이얼로그) 초기화 - null이 제출되면 오류남, 처리 필요
todoDialog.todowork.setText("")
todoDialog.todorole.setSelection(0)
todoDialog.todotime.setText("")
todoDialog.todoref.setSelection(0)

} else if (p1 == DialogInterface.BUTTON_NEGATIVE) {
} else if (p1 == DialogInterface.BUTTON_NEGATIVE) {

}
}
}
}

// 새 항목 추가 버튼 - 대화상자 열림
val alert = AlertDialog.Builder(this)
.setTitle("TODO 추가")
.setView(todoDialog.root)
.setPositiveButton("저장", save)
.setNegativeButton("취소", save)
.create()

binding.todoAdd.setOnClickListener {
// 투두리스트 항목 추가 버튼 리스너
val addListener = object: View.OnClickListener {
override fun onClick(it: View?) {
// todorole: 가족 목록을 드롭다운 spinner와 연결
family = familyFragment.familyArray
Log.d("mobileApp", "family $family")
nameArray = family.map { it.name }
userIdArray = family.map { it._id }
val spinnerAdapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, nameArray)
val spinnerAdapter = ArrayAdapter(this@TodoActivity, android.R.layout.simple_spinner_item, nameArray)
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
todoDialog.todorole.adapter = spinnerAdapter

// todoref: 시뮬레이션 목록을 드롭다운 spinner와 연결
val todorefAdapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, simArray)
val todorefAdapter = ArrayAdapter(this@TodoActivity, android.R.layout.simple_spinner_item, simArray)
todorefAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
todoDialog.todoref.adapter = todorefAdapter

// 다이얼로그 창 표시
alert.show()
}
}

// 탭바 연결
// 탭바 연결
private fun setTabBar() {
binding.navHome.setOnClickListener {
val intent_home = Intent(this, MainActivity::class.java)
startActivity(intent_home)
Expand Down Expand Up @@ -228,6 +224,27 @@ class TodoActivity : AppCompatActivity() {
}
}

// 오늘 날짜 투두리스트 요청 (초기화)
@RequiresApi(Build.VERSION_CODES.O)
private fun todoToday() {
// 오늘 날짜에 해당하는 To-do 불러오기 (DB 요청)
val formatDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))
val call: Call<GetTodoRes> = MyApplication.networkServiceTodo.getTodo( // familyID, yyyy-mm-dd
GetTodoReq(SaveSharedPreference.getFamliyID(this)!!, formatDate)
)
call?.enqueue(object : Callback<GetTodoRes> {
override fun onResponse(call: Call<GetTodoRes>, response: Response<GetTodoRes>) {
if(response.isSuccessful){
// 리사이클러뷰에 할 일 목록 표시
TodoActivity.updateTodoList((response.body()!!.todoInfo).toMutableList()) // Array<TodoItem>
}
}
override fun onFailure(call: Call<GetTodoRes>, t: Throwable) {
Log.d("mobileApp", "onFailure $t")
}
})
}

// 프래그먼트 연결
private fun viewFragment(fragment: Fragment, location: Int) {
Log.d("app_test", "viewFragment start")
Expand All @@ -236,7 +253,6 @@ class TodoActivity : AppCompatActivity() {

transaction.add(location, fragment)
transaction.commit()

}

override fun onStart() {
Expand Down
5 changes: 3 additions & 2 deletions SHAPEUP2022/app/src/main/res/layout/activity_to_do.xml
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,14 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="50dp"
android:layout_marginEnd="45dp"
android:text="활동" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/todo_recyclerView"
android:layout_width="match_parent"
android:paddingHorizontal="20dp"
android:paddingStart="20dp"
android:paddingEnd="16dp"
android:paddingVertical="6dp"
android:layout_height="wrap_content" />
<View
Expand Down
2 changes: 1 addition & 1 deletion SHAPEUP2022/app/src/main/res/layout/todoitem.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
android:id="@+id/todotime"
android:text="시간 설정" />
<TextView
android:layout_width="90dp"
android:layout_width="86dp"
android:layout_height="wrap_content"
android:textColor="@color/main_color"
android:text="관련 활동"
Expand Down

0 comments on commit ca1a126

Please sign in to comment.