-
Notifications
You must be signed in to change notification settings - Fork 5
5.5. 키워드 초기 설정
JiHwan edited this page Jan 15, 2021
·
6 revisions
- 텍스트가 입력 됐을 때만 버튼이 활성화 되게 하였습니다.
- 그 전 Fragment에서 Text를 받아와서 보여주었습니다.
- RecyclerView를 활용하여 전달 받은 키워드들을 화면에 보여주었습니다.
- ItemTouchHelper를 통해 터치해서 키워드들의 순서를 조정하게 만들었습니다.
private fun initEditText() {
binding.tvKeyword.text = keyword
binding.etDefine.addTextChangedListener {
val length = binding.etDefine.length()
binding.tvDefineByte.text = length.toString()
binding.btnSetPriority.isEnabled = length > 0
}
}
private fun initButton() {
binding.btnSetPriority.isEnabled = false
binding.btnSetPriority.setOnClickListener {
viewModel.postKeywordDefinition(name = keyword!!, definition = binding.etDefine.text.toString())
viewModel.isDefineSet[position] = true
popBackStack()
}
}
<EditText
android:id="@+id/et_define"
android:layout_width="match_parent"
android:layout_height="260dp"
android:background="@drawable/selector_edittext_box"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="48dp"
android:maxLength="200"
android:padding="16dp"
android:textSize="15sp"
android:gravity="start"
android:hint="나만의 정의를 작성 해 주세요."
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_info" />
private fun initToolbar() {
binding.tbKeywordDefineDetail.setNavigationOnClickListener {
popBackStack()
}
}
private fun observeKeywordDefinition() {
viewModel.keywordDefinition.observe(viewLifecycleOwner, {
binding.tvKeyword.text = it.name
binding.etDefine.setText(it.definition)
})
}
<EditText
android:id="@+id/et_define"
android:layout_width="match_parent"
android:layout_height="260dp"
android:background="@drawable/rectangle_orange_radius_15"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="48dp"
android:maxLength="200"
android:padding="16dp"
android:textSize="15sp"
android:gravity="start"
android:enabled="false"
android:textColor="@color/mainBlack"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_info" />
keywordDefineAdapter.setKeywordExistListener { keyword, position ->
//정의 없을때
val bundle = Bundle().apply {
putString("keyword", keyword.name)
putInt("position", position)
}
val keywordDefineAddFragment = KeywordDefineAddFragment().apply {
arguments = bundle
}
replaceAndAddBackStack(
R.id.container_keyword_settings,
keywordDefineAddFragment,
"add"
)
}
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_keyword"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="23dp"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toTopOf="@+id/btn_set_priority"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_set_priority"
tools:itemCount="4"
tools:listitem="@layout/item_keyword_define" />
private fun initRecyclerView() {
val itemTouchHelper = ItemTouchHelper(ItemTouchHelperCallback(keywordPriorityAdapter))
val dividerItemDecoration = DividerItemDecoration(requireContext(),LinearLayoutManager.VERTICAL)
dividerItemDecoration.setDrawable(ContextCompat.getDrawable(requireContext(),R.drawable.divider_recyclerview)!!)
binding.rvPriority.apply {
adapter = keywordPriorityAdapter
layoutManager = LinearLayoutManager(requireContext())
addItemDecoration(dividerItemDecoration)
setHasFixedSize(true)
itemTouchHelper.attachToRecyclerView(this)
}
keywordPriorityAdapter.data = keywordList?.toList() ?: listOf()
}
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_priority"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="48dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_set_priority"
tools:itemCount="4"
tools:listitem="@layout/item_keyword_priority" />