일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- Retrofit with MVVM
- 레트로핏 코틀린
- java
- recyclerview
- 리사이클러뷰
- 위치정보확인
- lifecycleScope
- 스크롤뷰 자식 뷰 높이 동적조절
- 다이얼로그 프래그먼트
- ScrollView with ConstraintLayout
- Android
- 데이터바인딩
- NestedScrollView
- location System
- 뷰바인딩
- programmers
- 인텐트란?
- 쉐어드
- 레트로핏 MVVM
- ScrollView Child View Height Programmatically
- DataBinding
- 안드로이드
- dialog fragment
- 다이얼로그 크기조절
- viewBinding
- Retrofit Kotlin
- dialogfragment singleton
- dialog resize
- 프로그래머스
- 레트로핏2
- Today
- Total
목록안드로이드 (14)
안드로이드 세계
다이얼로그 프래그먼트에서 아무생각없이 일반 프래그먼트와 동일하게 lifecycleScope를 이용했었더니 다음과 같은 문제가 발생하였다. 이 현상은 싱글톤으로 다이얼로그 프래그먼트를 생성하게되면 나타나는 문제이다. @AndroidEntryPoint class TestDialogFragment : DialogFragment() { ... init { lifecycleScope.launch { whenResumed { //초기세팅 } whenCreated { //초기 값 세팅 } } } } di(hilt)를 이용해 다이얼로그를 싱글톤으로 생성해주는데, 첫 1회는 해당 lifecycleScope는 잘 동작하지만, 두번째 부터는 해당구문은 타지않는다. 이 문제를 해결하기위해서는 init에서 설정할 것이 아닌 o..
BlueTooth가 앱이 켜진 후 연결되는건 잘감지가되지만, 이미 연결된 장치가 있는지 여부에 대해서 알 필요가 있었다. 구글링을 통해 알게되었는데, Method방식을 이용하였다. public boolean isConnected(BluetoothDevice device) { try { Method m = device.getClass().getMethod("isConnected", (Class[]) null); boolean connected = (boolean) m.invoke(device, (Object[]) null); return connected; } catch (Exception e) { throw new IllegalStateException(e); } } 연결되어있는 장치가 있다면 true를..
데이터 바인딩을 사용하다 보면 매번 액티비티나 프래그먼트마다 이렇게 만들어야 한다. class MainActivity : AppCompatActivity(){ private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = DataBindingUtil.setContentView(this, R.layout.activity_main) } } class FragmentMain :Fragment() { private lateinit var binding: FragmentMainBinding override fun ..
이번 포스팅에는 개와 고양이 두 종류로 분류하는 작업을 할 것이다. 분류하기 위해서 스피너라는 것을 사용할 예정이다. 따라서, 추가 다이얼로그에 스피너를 추가해준다. 다이얼로그 프래그먼트. xml 그리고 다이얼로그 프래그먼트에 스피너 값을 받아올 전역 변수 하나와 스피너 관련 리스너 및 초기화 작업을 해준다. 다이얼로그 프래그먼트 class AnimalDataAddDialogFragment : DialogFragment() { private var type = "Cat" private lateinit var spinner: Spinner ... override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(..
이번 포스팅에는 추가 및 삭제 이벤트를 넣어볼 것이다. 삭제 이벤트는 기본 다이얼로그인 AlertDialog와 롱 클릭 시 나타나는 팝업 메뉴를 사용할 예정이고, 추가 이벤트는 DialogFragment를 이용할 예정이다. 먼저 삭제 이벤트먼저 구현을 해볼 것이다. 기본 다이얼로그를 사용할 것이기 때문에 xml을 따로 추가할 필요는 없다(커스텀을 하기 위해서는 필요함) 메인에 다이얼로그를 추가한다. private fun deleteDialog(position: Int) { val dialog: AlertDialog = this@MainActivity.let { val builder: AlertDialog.Builder = AlertDialog.Builder(it) builder.apply { this.s..
이번 포스팅엔 RecyclerView에 클릭이벤트를 넣어볼 것이다. 이전 포스팅 ryan94.tistory.com/11 [Android] Recycler View - Step 1 리사이클러뷰나 리스트뷰는 리스트형태의 뷰로 보여주기위해 사용되는데, 차이점은 다음과같다. 리사이클러뷰 관련으로 4종류의 포스팅을 작성할 것인데, 이번 포스팅은 기본적인 리사이클러 ryan94.tistory.com 클릭이벤트엔 두 가지 방법이 있는데, 뷰 홀더 내에서 처리하는 것과 인터페이스를 구현하여 콜백을 이용하는 방법이 있다. 1. 인터페이스 이용 메인 xml은 변화가 없다. 메인 액티비티는 다음과 같이 변경한다. class MainActivity : AppCompatActivity(), AnimalAdapter.ItemCl..
리사이클러뷰나 리스트뷰는 리스트 형태의 뷰로 보여주기 위해 사용되는데, 차이점은 다음과 같다. 리사이클러뷰 관련으로 4종류의 포스팅을 작성할 것인데, 이번 포스팅은 기본적인 리사이클러뷰를 만드는 작업을 하겠다. Android Studio 4.1.1 버전으로 올라감에 따라 디펜던시를 추가할 필요가 없지만, 이전 버전을 사용하는 경우 아래의 디펜던시가 필요하다.(정확히 어떤 시점인지는 알 수없으니 아시는 분은 댓글 부탁드립니다.) implementation 'androidx.recyclerview:recyclerview:1.1.0' 이번 예제는 개와 고양이(이름, 휴대전화 번호)를 리스트 형태로 보여주는 것으로 하겠다. 데이터 클래스는 다음과 같이 구성한다. data class Animal( val type..
DataBinding? 데이터 바인딩이란 xml에 Data를 연결하는 작업을 말합니다. Android JetPack 라이브러리 중 하나입니다. findViewById를 사용하지 않아도 되며, 주로 MVVM패턴, LiveData와 함께 사용합니다. 단, 필수는 아닙니다. Data연결을 사용하지 않는다면 이전 포스팅인 ViewBinding에 대해서 알아보는 것이 좋습니다. ryan94.tistory.com/9 ViewBinding (뷰바인딩) ViewBinding? 뷰와 상호작용하는 코드를 쉽게 작성할수 있으며, 각 xml레이아웃 파일의 binding 클래스를 생성합니다. findViewById를 대체합니다. ViewBinding 사용법 build.gradle android { ... viewBinding ..