Skip to content

5.5. 키워드 초기 설정

JiHwan edited this page Jan 15, 2021 · 6 revisions

구현 방법

✔️ KeywordDefineAddView

Main

  • 텍스트가 입력 됐을 때만 버튼이 활성화 되게 하였습니다.

✔️ KeywordDefineDetailFragment

Main

  • 그 전 Fragment에서 Text를 받아와서 보여주었습니다.

✔️ KeywordDefine

Main

  • RecyclerView를 활용하여 전달 받은 키워드들을 화면에 보여주었습니다.

✔️ KeywordPriorityFragment

Main

  • ItemTouchHelper를 통해 터치해서 키워드들의 순서를 조정하게 만들었습니다.

구현 코드

✔️ KeywordDefineAddFragment.kt

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()
    }
}

✔️activity_keyword_define_add.xml

<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" />

✔️ KeywordDefineDetailFragment.kt

private fun initToolbar() {
        binding.tbKeywordDefineDetail.setNavigationOnClickListener {
            popBackStack()
        }
    }

    private fun observeKeywordDefinition() {
        viewModel.keywordDefinition.observe(viewLifecycleOwner, {
            binding.tvKeyword.text = it.name
            binding.etDefine.setText(it.definition)
        })
    }

✔️ activity_keyword_define_detail.xml

<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" />

✔️ KeywordDefineFragment.kt

        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"
            )
        }

✔️activity_keyword_define.xml

<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" />

✔️ KeywordPriorityFragment.kt

    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()
    }

✔️activity_keyword_priority.xml

<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" />

실행 화면

image image image image