전체 글 (33) 썸네일형 리스트형 Android - 화면 당겨서 새로고치는 방법(SwipeRefreshLayout 사용 방법) 흔히 앱을 사용하다가 보면 화면에서 위에서 아래로 화면을 당겨서 새로고침을 경험해본 적 있을 것이다. Android는 해당 기능을 구현한 SwipeRefreshLayout을 제공하고 있으며, SwipeRefreshLayout을 생성 후 리스너 설정을 통해 원하는 결과를 얻을 수 있다. 1. build.gradle에 종속성 추가 dependdencies { ... implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0" ... } 2. 새로고침을 할 뷰 영역을 SwipeRefreshLayout으로 감싼다. 3. SwipeRefreshLayout에 setOnRefreshListener(listener: OnRefreshListener?) 메.. Android Data Binding을 활용한 ViewPager와 TabLayout 연결 안드로이드 개발하면서 화면 구성에 TabLayout을 자주 사용하게 된다. 또한 여러 개의 뷰를 좌우로 넘기면서 확인할 수 있는 ViewPager도 사용한다. Fragment 구성을 하면 자주 쓰는 두 Layout을 서로 연결하는 방법을 알아보도록 하겠다. 방법을 간단히 설명하면, ViewPager의 Listener 중 OnPageChangeListener가 있는데 메서드가 3개 있다. onPageScrollStateChanged(state: Int) ViewPager의 스크롤 상태가 변경될 때 호출되는 메서드며, 총 3가지 상태가 있다. SCROLL_STATE_IDLE : Indicates that the pager is in an idle, settled state. The current page i.. java.lang.IllegalArgumentException: Comparison method violates its general contract! 해결 방법 개발을 할 때 데이터 정렬을 위해 Comparator 사용이 필요할 경우가 있다. 'java.lang.IllegalArgumentException: Comparison method violates its general contract!' 에러의 경우 Collection 사용 중 정렬을 위해 Comparator를 사용할 경우 return 값의 정의를 명확히 해줘야 한다는 내용이다. 해결 방법은 나와있는 그대로이다. Comparator의 return 값을 모든 상황에 맞게 전단해주는 것이다. 두 값을 비교하는 것이기 때문에 A 데이터와 B 데이터 중 한 쪽이 크거나, 혹은 두 값이 같은 경우, 모두 명시를 해줘야 하는 것이다.(Java 9에서 해당 오류가 수정되었다고 한다.) 아래는 kotlin.compar.. 안드로이드 크롤링(Crawling)하기 (Jsoup Library 활용) Jsoup은 Java 라이브러리로 HTML 문서에 저장된 데이터를 파싱할 때 사용되는 라이브러리입니다. 라이브러리 적용방법은 build.gradle에 dependency 추가로 사용이 가능합니다. ... dependencies { ... implementation 'org.jsoup:jsoup:1.12.2' ... } ... 위와 같이 라이브러리를 추가해주면 사용이 가능합니다. 사용방법은 매우 간단합니다. fun useJsoup(url: String) { Jsoup.connect(url).get().let { doc -> //타이틀 doc.title() //바디 태그 가져오기 doc.body() // 클래스명으로 Elements 가져오기 doc.getElementsByClass() // td 태크의 El.. 안드로이드에서 주소를 좌표로 변환 하기(GeoCoder) 안드로이드에서 지도 등을 활용할 때 주소 정보를 좌표 정보로 변환해야 하는 경우가 있다. 이럴 때 사용하는 것이 Android에서 제공되는 클래스인 Geocoder이다. android.location 패키지에 있으며, 주소에서 좌표 혹은 좌표에서 주소 정보를 가져올 수 있다. 사용방법은 간단하다. Geocoder 객체 생성 후 원하는 메서드를 호출해주면 된다. 주로 사용되는 메서드는 아래와 같다. getFromLocation(latitude: Double, longitude: Double, maxResults: Int): List 위경도 값을 토대로 주소정보를 제공한다. getFromLocationName(address: String, maxResults: Int): List 주소명을 토대로 데이터를 제.. Android RecyclerView 갱신이 안되는 원인 정리 안드로이드 앱 개발 중 에러가 발생하는 경우는 정말 감사하다. 바로 어디가 문제인지 볼 수도, 찾아볼 수도 있기 때문이다. 하지만 뷰 구성을 할 때 에러가 안나는 경우가 많으며, 찾기도 힘들다. 이럴 때는 경험상 정상적인 사용을 하였는가를 짚어봐야 한다. 그 중 최근에 헤맸던 부분을 공유하고자 한다. RecyclerView는 기본적으로 ViewHolder 패턴을 지원하기에 Adapter에 onBindViewHolder() 메서드를 제공하며 override로 구현해야 한다. 해당 onBindViewHolder()가 호출되지 않는 경우였는데 아래의 경우가 있다. 1. RecyclerView.Adapter.getItemCount()의 return 값이 0일 경우 2. LayoutManager 를 적용하지 않았.. Android EditText 입력창(SoftInput) 숨기는 방법 안드로이드 개발을 하다보면 자주 사용하는 EditText가 있다. 그런데 사용자는 값을 입력 후 검색 혹은 로그인, 저장 등의 활동을 할 것이다. 이 때 EditText를 숨겨주지 않는다면, 사용자는 해당 앱에 대해 매우 불편함을 느낄 것이다. 해결 방법은 간단하다. 안드로이드에서는 InputMethodManager를 제공하는데 해당 클래스의 메서드를 활용하여, SoftInput(입력화면)을 숨기거나 가져올 수 있다. 해당 메서드는 아래와 같다. public boolean hideSoftInputFromWindow(IBinder windowToken, int flags) 입력창을 숨기는 메서드 public boolean showSoftInput(View view, int flags) 입력창을 보여주는 메.. Invoke-customs are only supported starting with android 0 --min-api 26 해결방법 빌드 시 간헐적으로 해당 메세지를 보이며 에러가 나는 경우가 있다. 'Invoke-customs are only supported starting with android 0 --min-api 26' 원인은 아마도 코딩하며 사용된 문법중에 Java8부터 지원하는 문법을 사용하였을 경우에 발생하는 것 같다. 해결방법은 간단하다. 빌드시 Complie 옵션으로 Java8을 지정해주면 된다. 방법은 아래와 같다. 1. 상단 메뉴의 File > Project Structure 로 이동 2. Modules 탭의 'Source Compatibility'와 'Target Compatibility'를 Java8(1.8)로 지정후 적용 아래는 build.gradle에 추가되는 코드이다. android { ... compi.. 이전 1 2 3 4 5 다음