일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 1차원 DP
- 2차원 dp
- 99클럽
- @BeforeAll
- @BeforeEach
- @Builder
- @Entity
- @GeneratedValue
- @GenericGenerator
- @NoargsConstructor
- @Query
- @Table
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- ApplicationEvent
- assertThat
- async/await
- AVG
- AWS
- Azure
- bind
- builder
- button
- c++
- c++ builder
- c03
- Today
- Total
기록
AndroidStudio/kotlin/Enum을 이용한 fragment 재활용 본문
Enum
- 명명된 값의 집합을 이루는 자료형
- 자바 Enum은 상수 컬렉션을 정의하는 데 쓰이는 특수한 타입으로 상수, 메서드 등이 포함될 수 있다.
- 장점
- 허용가능한 값들을 제한
- 내용의 추가 및 변경 시 범위가 최소화
개요
쓰기 화면을 재사용하기 위해 아래와 같은 구조를 계획했다. (1) 기존의 내용을 수정할지/ (2) 새로 작성할지에 따라 수행해야 하는 작업을 분기해 주어야 했고, 이를 위해 fragment를 생성할 때, (1) 기존의 내용을 수정할지/ (2) 새로 작성할지를 전달해주기로 했다.
활용
- (1) MainActivity(TilListFragment) → MainActivity(TilItemFragment)
// TilParentFragment.kt
fun changeFragment(fragment: Fragment){
childFragmentManager.beginTransaction().replace(R.id.nav_host_til, fragment).commit()
}
// TilListFragment.kt
private fun initRecyclerview(){
binding?.recyclerList?.adapter = adapter
adapter.setOnItemClickListener(object : TilListAdapter.OnItemClickListener{
override fun onItemClick(item: TilItem) {
val parent : TilParentFragment = parentFragment as TilParentFragment
parent.changeFragment(TilItemFragment(TilWriteMode.UPDATE, item))
}
})
}
- (2) SyllabusActivity → TilWriteActivity(TilItemFragment)
// SyllabusActivity.java
new View.OnClickListener() {
@Override
public void onClick(View view) {
// go to til write
Intent intent = new Intent(this, TilWriteActivity.class);
startActivity(intent);
}
});
// TilWriteActivity.kt
changeFragment(TilItemFragment(TilWriteMode.CREATE, tilItem))
private fun changeFragment(fragment: Fragment){
supportFragmentManager.beginTransaction().replace(R.id.frameLayout, fragment).commit()
}
- TilItemFragment.kt
// TilItemFragment.kt
class TilItemFragment(
val mode : TilWriteMode,
val tilItem : TilItem
) : Fragment() {
//...
btnCancel.setOnClickListener {
when (mode){
TilWriteMode.CREATE -> (parentFragment as? TilParentFragment)?.changeFragment(TilListFragment())
TilWriteMode.UPDATE -> (requireActivity() as? TilWriteActivity)?.finish()
}
}
btnSave.setOnClickListener {
when (mode){
TilWriteMode.CREATE -> onCreateTil()
TilWriteMode.UPDATE -> onUpdateTil()
}
}
btnDelete.setOnClickListener {
when (mode){
TilWriteMode.CREATE -> (parentFragment as? TilParentFragment)?.changeFragment(TilListFragment())
TilWriteMode.UPDATE -> {//delete...}
}
}
}
// TilWriteMode.kt
enum class TilWriteMode {
CREATE, UPDATE;
}
개선할 점
- Fragment의 중첩
위 프로젝트에서는 (MainActivity) 위에 (TilParentFragment), 그 위에 (TilListFragment 또는 TilItemFragment)가 올라가는 형식을 취하고 있다. fragment 깊이를 어떻게 설정해야 할지에 대한 고민이 있었다.
- 코드의 복잡성
각 모드별로 처리 해야 하는 일이 많아지고 복잡해진다면, layout(xml)만 공유하고, fragment를 따로 두는 것이 이해하기 쉬울 수 있다.
참고한 자료
https://techblog.woowahan.com/2527/
Java Enum 활용기 | 우아한형제들 기술블로그
{{item.name}} 안녕하세요? 우아한 형제들에서 결제/정산 시스템을 개발하고 있는 이동욱입니다. 이번 사내 블로그 포스팅 주제로 저는 Java Enum 활용 경험을 선택하였습니다. 이전에 개인 블로그에 E
techblog.woowahan.com
https://ko.wikipedia.org/wiki/%EC%97%B4%EA%B1%B0%ED%98%95
열거형 - 위키백과, 우리 모두의 백과사전
ko.wikipedia.org
https://www.w3schools.com/java/java_enums.asp
Java Enums
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com
'Moblie > Android' 카테고리의 다른 글
issue/Spinner/java.lang.NullPointerException(onItemSelected) (0) | 2022.11.21 |
---|---|
Androidstudio/kotlin/멀티뷰타입 리사이클러뷰 응용 (0) | 2022.08.10 |
[issue] 공공데이터 api connectError (0) | 2022.07.18 |
AndroidStudio/XML의 글꼴 적용하기 (0) | 2022.07.12 |
AndroidStudio/kotlin/Custom Exception (0) | 2022.07.10 |