Skip to content

Commit

Permalink
#32 / 바인딩 다이얼로그 프레그먼트 구현, 사용 예시(history)
Browse files Browse the repository at this point in the history
  • Loading branch information
l2zh authored and taeheeL committed Jul 15, 2023
1 parent 514a222 commit 36c2f14
Show file tree
Hide file tree
Showing 11 changed files with 89 additions and 135 deletions.
6 changes: 3 additions & 3 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -88,16 +88,16 @@

<activity
android:name=".presentation.MissionDetailCreateActivity"
android:exported="false"
android:exported="true"
android:screenOrientation="portrait" />

<activity
android:name=".presentation.MainHistoryActivity"
android:name=".presentation.HistoryMainActivity"
android:exported="true"
android:screenOrientation="portrait" />

<activity
android:name=".presentation.SubHistoryActivity"
android:name=".presentation.HistorySubActivity"
android:exported="false"
android:screenOrientation="portrait" />

Expand Down
3 changes: 2 additions & 1 deletion app/src/main/java/sopt/uni/presentation/HistoryAdapter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import androidx.recyclerview.widget.RecyclerView
import sopt.uni.data.entity.history.HistoryItem
import sopt.uni.databinding.ItemHistorylistBinding
import sopt.uni.util.extension.ItemDiffCallback
import sopt.uni.util.extension.setOnSingleClickListener

class HistoryAdapter(
private val context: Context,
Expand Down Expand Up @@ -65,7 +66,7 @@ class HistoryAdapter(
historyItemGameResult.text = item.result
historyItemRightImage.setImageDrawable(binding.root.context.getDrawable(item.next))

historyItemRightImage.setOnClickListener {
historyItemRightImage.setOnSingleClickListener {
// 클릭 이벤트 처리
val item = getItem(adapterPosition)
itemClickedListener.invoke(item)
Expand Down
22 changes: 22 additions & 0 deletions app/src/main/java/sopt/uni/presentation/HistoryDialog.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package sopt.uni.presentation

import android.os.Bundle
import android.view.View
import sopt.uni.R
import sopt.uni.databinding.TitleAction1DialogBinding
import sopt.uni.util.extension.setOnSingleClickListener

// 예시용 입니다! 히스토리는 다이얼로그 없어용
class HistoryDialog :
BindingDialogFragment<TitleAction1DialogBinding>(R.layout.title_action1_dialog) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// 텍스트 넣기
binding.dialogBody.setText("내용임둥")
binding.dialogTitle.setText("제목임둥")
// 클릭시 로직 처리
binding.btnPositive.setOnSingleClickListener {
dismiss()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@ import sopt.uni.data.entity.history.HistoryList
import sopt.uni.databinding.ActivityMainHistoryBinding
import sopt.uni.util.binding.BindingActivity

class MainHistoryActivity :
class HistoryMainActivity :
BindingActivity<ActivityMainHistoryBinding>(R.layout.activity_main_history) {

private val historyAdapter by lazy {
HistoryAdapter(
context = this@MainHistoryActivity,
context = this@HistoryMainActivity,
onEmptyList = { isEmpty ->
if (isEmpty) {
binding.itemHistoryEmptylist.visibility = View.VISIBLE
Expand All @@ -24,7 +24,7 @@ class MainHistoryActivity :
}
},
itemClickedListener = { historyItem ->
val intent = Intent(this, SubHistoryActivity::class.java)
val intent = Intent(this, HistorySubActivity::class.java)
startActivity(intent)
},
)
Expand All @@ -35,14 +35,17 @@ class MainHistoryActivity :
setContentView(binding.root)

binding.rvHistoryList.adapter = historyAdapter
binding.rvHistoryList.layoutManager = LinearLayoutManager(this@MainHistoryActivity)
binding.rvHistoryList.layoutManager = LinearLayoutManager(this@HistoryMainActivity)

// 다이얼로그 띄우는 부분
HistoryDialog().show(supportFragmentManager, "HistoryDialog")

historyAdapter.submitList(HistoryList)

val dividerItemDecoration =
DividerItemDecoration(
binding.rvHistoryList.context,
LinearLayoutManager(this@MainHistoryActivity).orientation,
LinearLayoutManager(this@HistoryMainActivity).orientation,
)
binding.rvHistoryList.addItemDecoration(dividerItemDecoration)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ import sopt.uni.R
import sopt.uni.databinding.ActivitySubHistoryBinding
import sopt.uni.util.binding.BindingActivity

class SubHistoryActivity :
class HistorySubActivity :
BindingActivity<ActivitySubHistoryBinding>(R.layout.activity_sub_history) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)

binding.historySubBack.setOnClickListener {
val intent = Intent(this, MainHistoryActivity::class.java)
val intent = Intent(this, HistoryMainActivity::class.java)
startActivity(intent)
finish()
}
Expand Down
120 changes: 0 additions & 120 deletions app/src/main/java/sopt/uni/presentation/HistoryViewModel.kt

This file was deleted.

40 changes: 40 additions & 0 deletions app/src/main/java/sopt/uni/util/binding/BindingDialogFragment.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package sopt.uni.presentation

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import androidx.annotation.LayoutRes
import androidx.databinding.DataBindingUtil
import androidx.databinding.ViewDataBinding
import androidx.fragment.app.DialogFragment

abstract class BindingDialogFragment<B : ViewDataBinding>(@LayoutRes private val layoutRes: Int) :
DialogFragment() {
private var _binding: B? = null
val binding get() = requireNotNull(_binding!!) { "${this::class.java.simpleName}에서 에러가 발생했습니다." }

override fun onStart() {
super.onStart()
dialog?.window?.setLayout(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
)
dialog?.window?.setBackgroundDrawableResource(android.R.color.transparent)
}

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
_binding = DataBindingUtil.inflate(inflater, layoutRes, container, false)
return binding.root
}

override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
4 changes: 2 additions & 2 deletions app/src/main/java/sopt/uni/util/binding/BindingFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@ import androidx.fragment.app.Fragment
import sopt.uni.R

abstract class BindingFragment<T : ViewDataBinding>(
@LayoutRes private val layoutRes: Int
@LayoutRes private val layoutRes: Int,
) : Fragment() {
private var _binding: T? = null
protected val binding get() = _binding ?: error(getString(R.string.binding_error))

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
savedInstanceState: Bundle?,
): View? {
_binding = DataBindingUtil.inflate(inflater, layoutRes, container, false)
binding.lifecycleOwner = viewLifecycleOwner
Expand Down
3 changes: 2 additions & 1 deletion app/src/main/res/layout/activity_mission_detail_create.xml
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,8 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginVertical="16dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="40dp"
android:background="@drawable/bg_mission_detail_button_rounded"
android:fontFamily="@font/pretendard_semibold"
android:paddingVertical="12dp"
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/layout/activity_sub_history.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/Gray_100"
tools:context=".presentation.SubHistoryActivity">
tools:context=".presentation.HistorySubActivity">

<ImageView
android:id="@+id/history_sub_back"
Expand Down
7 changes: 7 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -85,4 +85,11 @@
<string name="create_short_game_wish_content_hint">이번 승부에 걸 소원을 입력해주세요! \n소원은 지금 정하지 않고 승부가 끝난 뒤에도 작성할 수 있어요</string>
<string name="create_short_game_btn">한판 승부 만들기</string>

<!-- dialog -->
<string name="dialog_cancel_text">취소</string>
<string name="dialog_apply_text">적용하기</string>
<string name="dialog_body_text">body</string>
<string name="dialog_ok_text">확인</string>
<string name="dialog_title_text">Title</string>

</resources>

0 comments on commit 36c2f14

Please sign in to comment.