안드로이드

안드로이드/안드로이드

[Android/Kotlin] 액티비티의 종료로 ViewModel이 죽어버렸다!

https://github.com/LESSERAFIM-Aespa/TripMate/issues/126 가계부 컨탠츠(BudgetContentActivity) 가계부 수정시 버그 · Issue #126 · LESSERAFIM-Aespa/TripMate “가계부 컨탠츠(BudgetContentActivity) 가계부 수정시 버그” Describe the bug 가계부 수정시 카테고리를 추가하거나 삭제할경우 해당 카테고리가 추가되거나 삭제되지 않는 이슈가 발생 카테고리 삭재 github.com 개발을 하면서 액티비티에서 ViewModel의 함수를 사용 중, contentViewModel.updateBudgetAndCategories(budget.copy(num = budgetNum), categories) fi..

안드로이드/안드로이드

[Android/Kotlin] 알림(Notification) - 2, 알림의 속성

3. Notification의 정보를 입력후 알림을 등록 builder.run { setSmallIcon(R.mipmap.ic_launcher) setWhen(System.currentTimeMillis()) setContentTitle("키워드 알림") setContentText("설정한 키워드에 대한 알림이 도착했습니다!!") setStyle( NotificationCompat.BigTextStyle() .bigText("설정한 키워드에 대한 알림이 도착했습니다!!") ) } manager.notify(NOTIFICATION_ID, builder.build()) Notification 구성 해당 알림은 기본적인 형태의 알림입니다. 작은 아이콘: 필수 구성요소이며 setSmallIcon()을 통해 설정..

안드로이드/안드로이드

[Android/UI] BackGroundTint 값 Hex값으로 설정

여러 뷰들을 사용하다 보면 background를 설정해 놓고 필터처럼 색만 바꾸고 싶을 때가 있습니다. 이럴 때 쓰이는 속성인 BackGroundTint라는 속성값이 있습니다. 필자는 해당값을 xml이아닌 코틀에서 바꿔야 되는 상황을 격었습니다. 이러한 코드들을 찾아보니 viewStateCircleItem.backgroundTintList = when (data.isAvailable) { true -> ColorStateList.valueOf(ContextCompat.getColor(this.root.context, R.color.stateGrean)) else -> ColorStateList.valueOf(ContextCompat.getColor(this.root.context, R.color.gray..

안드로이드/안드로이드

[Android/Kotlin] Room 외래키 적용

이번에 프로젝트를 하게 되면 Room을 이용해 DB를 적용해 보았습니다. 처음에는 이러한 구조로 entity들을 설계하였습니다. 이렇게 만들려고 하니 Room에서 외래키의 연결이 잘못돼있다면서 787 에러를 보여줬습니다. 위의 구조의 경우 순환 참조가 일어납니다. 모든 테이블이 연결돼있으므로 참조할 수 없게 되는 현상이 생깁니다. 그래서 해당 참조를 끊어줘야 합니다. 이관계에서는 사실상 과정테이블의 경우 budgetNum은 필요가 없습니다. 편의를 위해 만든 것일 뿐 해당 과정이 어떤 가계부에 속해있는지는 부모인 카테고리를 따라 올라가다 보면 가계부를 찾을 수 있습니다. 변환시킨 DB 구조입니다. 이 구조를 코드로 만들면 @Entity( tableName = "BUDGET", ) data class Bu..

안드로이드/안드로이드

[Android/Kotlin] ViewModel 과 ViewPager

ViewModel은 같은 프래그먼트 끼리 동시에 사용하기 위해서는 private val sharedViewModel: MainSharedViewModel by lazy { ViewModelProvider(requireActivity())[MainSharedViewModel::class.java] } 이런 식으로 프래그먼트에서 액티비티를 불러와서 ViewModelStoreOwner로 지정해 주거나 private val sharedViewModel: MainSharedViewModel by activityViewModels() 위의 방법처럼 activityViewModels()를 사용하는 방법이 있습니다. 이러던 중 공유된 ViewModel의 라이브데이터를 observe를 하는 중 해당 프래그먼트가 켜져있지..

안드로이드/안드로이드

[Android/Kotlin] SharedPreferences

Preference란? 프로그램의 설정 정보 (사용자의 옵션 선택 사항이나 프로그램의 구성 정보)를 영구적으로 저장하는 용도로 사용 XML 포맷의 텍스트 파일에 키-값 세트로 정보를 저장 응용 프로그램 내의 액티비티 간에 공유하며, 한쪽 액티비티에서 수정 시 다른 액티비티에서도 수정된 값을 읽을 수 있다. 사용법 1. getSharedPreferences (name, mode) 여러 개의 Shared Preference파일들을 사용하는 경우 name : 프레퍼런스 데이터를 저장할 XML 파일의 이름이다. mode : 파일의 공유 모드 - MODE_PRIVATE: 생성된 XML 파일은 호출한 애플리케이션 내에서만 읽기 쓰기가 가능 - MODE_WORLD_READABLE, MODE_WORLD_WRITEABL..

안드로이드/안드로이드

[Android/Kotlin] DialogFragment 크기조절

안드로이드에는 커스텀한 다이얼로그를 사용하고 싶어 DialogFragment를 상속받는 새로운 다이얼로그를 만들곤 합니다. 여기서 주의할 점은 해당 다이얼로그의 크기를 제대로 설정을 해주지 않는다면 DialogFragment의 크기때문에 원하는 디자인이 안 나올 수도 있다는 것입니다. 여기서는 2가지 방법으로 크기로 조절할 수 있습니다. xml에 고정된 값주기 FrameLayout 등 뷰그룹을 사용해 감싸주면 원하는 사이즈의 다이얼로그가 노출됩니다. 그렇지만 이 방법의 경우 모든 안드로이드 폰의 화면이전부 다르기 때문에 상대적으로 줄 수는 없다는 점입니다. 코드에서 조절 //in DialogFragment onCreate(){ requireContext().dialogFragmentResize(this,..

안드로이드/안드로이드

[Android/Kotlin] 퍼미션(권한)허용

안드로이드앱에서는 기기에 있는 데이터나 기능들을 접근하기 위해서는 권한을 설정해줘야 합니다. 또한 그권한이 중요한 권한이거나 버전이 올라감에 따라 manifest에 사용하겠다고 알려주더라도 앱에서 또 한 번 사용자에게 이 권한을 사용해도 되는지 물어볼 수 있습니다. ContextCompat.checkSelfPermission함수를 통하여 현재 권한이 있는지 확인할수있으며ActivityCompat.requestPermissions로 안드로이드에서 지원하는 권한용청 다이얼로그를 보여줄 수 있습니다. 그렇지만 거부했을경우 사용자에게 이 부분으로 생길 수 있는 문제를 알릴 필요가 있습니다. 이러한 부분은 ActivityCompat.shouldShowRequestPermissionRationale로 조건문으로 검..

안드로이드/안드로이드

[Android/Kotlin] 리사이클러뷰(RecyclerView) 스와이프 이벤트

안드로이드의 리사이클러뷰에서 스와이프 이벤트를 하는 방법 중 ItemTouchHelper.callback()을 이용할 수 있습니다. 리사이클러뷰에서 스와이프나 드래그등 동작을지원해 해당 동작들을 허용하거나 막을 수 있으며 해당 동작을 했을 때 어떤 이벤트를 발생시킬 것인지 관리할 수 있습니다. 사용법 //적용 //.... userListItemHelper.attachToRecyclerView(recyclerView)//리사이클러뷰와 연결 연결 //구현 class UserListItemHelper(private val requsetPermission:(pos:Int)->(Unit)) : ItemTouchHelper.Callback() { companion object{ private const val TA..

안드로이드/안드로이드

[Android/Kotlin] attachToParent

뷰바인딩에서는 inflate 함수가 2가지 오버로드된 버전으로 제공됩니다. 이 두 가지 버전의 차이는 attachToParent 매개변수의 유무입니다. 다음은 두 가지 버전의 inflate 함수의 예시 코드입니다. //attachToParent 사용 하지 않음 val binding = ActivityMainBinding.inflate(layoutInflater) //attachToParent 사용 val binding = ActivityMainBinding.inflate(layoutInflater, parent, attachToParent = false) 리사이클러뷰에서는 binding을 이용해 뷰홀더를 만드는 과정에서는 해당작업을 할 때는 아래와 같은 inflate 함수를 사용해야 합니다. 만약 그렇지..

감자씨앗
'안드로이드' 카테고리의 글 목록 (4 Page)