diff --git a/app/src/main/java/kr/co/vividnext/sodalive/chat/character/comment/CharacterCommentReplyFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/chat/character/comment/CharacterCommentReplyFragment.kt index 85ab2464..e4c160cd 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/chat/character/comment/CharacterCommentReplyFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/chat/character/comment/CharacterCommentReplyFragment.kt @@ -12,14 +12,14 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import coil.load import coil.transform.CircleCropTransformation +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.schedulers.Schedulers import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.base.BaseFragment import kr.co.vividnext.sodalive.common.LoadingDialog import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.databinding.FragmentCharacterCommentReplyBinding import kr.co.vividnext.sodalive.extensions.dpToPx -import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers -import io.reactivex.rxjava3.schedulers.Schedulers import org.koin.android.ext.android.inject /** @@ -93,21 +93,49 @@ class CharacterCommentReplyFragment : BaseFragment + if (resp.success) { + // 성공 시 낙관적 UI 반영: 기존 스텁과 동일하게 즉시 목록에 추가 + val me = CharacterReplyResponse( + replyId = System.currentTimeMillis(), + memberId = SharedPreferenceManager.userId, + memberProfileImage = SharedPreferenceManager.profileImage, + memberNickname = SharedPreferenceManager.nickname, + createdAt = System.currentTimeMillis(), + comment = text + ) + val insertAt = adapter.items.size + adapter.items.add(me) + adapter.notifyItemInserted(insertAt) + binding.rvCommentReply.scrollToPosition(adapter.items.size - 1) + binding.etComment.setText("") + } else { + Toast.makeText( + requireContext(), + resp.message ?: "요청 중 오류가 발생했습니다", + Toast.LENGTH_SHORT + ).show() + } + }, { e -> + Toast.makeText( + requireContext(), + e.message ?: "요청 중 오류가 발생했습니다", + Toast.LENGTH_SHORT + ).show() + }) + compositeDisposable.add(d) } adapter = CharacterCommentReplyAdapter( @@ -134,16 +162,30 @@ class CharacterCommentReplyFragment : BaseFragment { outRect.top = 13.3f.dpToPx().toInt(); outRect.bottom = 12f.dpToPx().toInt() } - adapter.itemCount - 1 -> { outRect.top = 12f.dpToPx().toInt(); outRect.bottom = 13.3f.dpToPx().toInt() } - else -> { outRect.top = 12f.dpToPx().toInt(); outRect.bottom = 12f.dpToPx().toInt() } + 0 -> { + outRect.top = 13.3f.dpToPx().toInt(); outRect.bottom = 12f.dpToPx().toInt() + } + + adapter.itemCount - 1 -> { + outRect.top = 12f.dpToPx().toInt(); outRect.bottom = 13.3f.dpToPx().toInt() + } + + else -> { + outRect.top = 12f.dpToPx().toInt(); outRect.bottom = 12f.dpToPx().toInt() + } } } }) @@ -218,12 +260,16 @@ class CharacterCommentReplyFragment : BaseFragment