activity: 10개의 글
Android Intent를 통해 Activity, Service, BroadCast 등 여러 구성요소 사이에서 통신을 용이하게해줍니다. 오늘은 Acitivity사이에서 통신하는 명시적 Intent에 대해 알아보겠습니다. 1. Intent Intent는 일종의 메시지 객체이다. Intent를 통해 Activity의 새 인스턴스를 시작하는 방법은 여러가지가 있다. 우선 Activity의 새 인스턴스(다른 액티비티 시작)를 시작하려면 Intent를 startActivity()로 전달해야한다. 새 인스턴스에 데이터를 넘겨주기 위해서는putExtra() 메서드를 이용한다. 또한 이전 Activity로 돌아와서 수행 결과를 받으려면 startActivity()를 통해 Activity의 새 인스턴스를 시작하고 se..
1. 스피너란? 안드로이드에서 스피너는 핵심 기능으로 사용되기 보다는 사용자 UI로써 일련의 작업 과정에 속하는 일이 많습니다. 예를들면 회원가입 시 생년월일이나 지역을 선택하는 과정에서 쓰입니다. 아래 그림은 스피너 쓰임의 예를 보여줍니다. [그림 1] 회원 가입 시 스피너의 사용 예 2. 스피너 생성 스피너의 생성 시 사용되는 네임은 Spinner입니다. in activity_main.xml 3. ArrayAdapter 사용 기본적으로 ArrayAdapter는 현재 Context(1)와 사용할 LayoutResource(2), Array(or ArrayList)(3)를 받아 스피너를 만들어줍니다. ArrayAdapter 객체를 생성하는 방법은 아래와 같다. [그림 2] ArrayAdapter 객체 생..
1. CustomListView Event Listener 구현 방법 지난 '커스텀 리스트뷰 구현' 포스팅에서 '메인액티비티-어댑터-아이템클래스'를 연결하여 커스텀 리스트뷰를 구현했습니다. 하지만 좀 더 기능적인 앱 구현을 돕기 위해 각 위젯에 대한 클릭 이벤트를 발생 시키는 방법을 알려드리려합니다. [그림 1] 커스텀 리스트 뷰의 각 리스트의 위젯에 대한 클릭 이벤트 처리 리스너 구현 방법에 대한 방법을 설명 드리겠습니다. 커스텀 리스트뷰를 구현할때 어댑터클래스에 BaseAdapter를 상속받아 재정의 했던 메서드 중에 getView()라는 메서드가 있었습니다. 이 메서드는 생성되는 n개의 리스트 수 만큼 실행되어 각각의 위젯을 참조하고 설정합니다. 즉 커스텀 리스트뷰를 띄우기 위해 getView()를..
1. Tab Button 요즘 Tab을 이용한 앱 구성이 많이 활발해졌습니다. 페이스북이나 인스타그램, 카카오톡만 해도 탭 버튼을 이용한 화면 구성 법을 사용하고 있습니다. 이 앱들의 소스코드에서는 어떤 방식으로 Tab을 구현하였는지는 알지 못하나 저희도 Tab을 쉽게 구현 할 수 있다는 것은 확실합니다! [그림 1] 카카오톡과 인스타그램의 탭 버튼 구성 Tab버튼을 구성하는데는 여러가지의 방법이 있습니다. 이 포스팅에서는 아래 그림과 같이 Activity의 버튼(보여줄 화면의 수 만큼)과 나머지 영역에 framLayout이라는 위젯을 배치하여 전체적인 레이아웃을 구성하고, 버튼 선택 시 framLayout에 원하는fragment를 띄우는 방식으로 구현할 것 입니다. [그림 2] FrameLayout과 ..
1. ListView, CustomListView 무엇이 다른가? 안드로이드의 리스트뷰(ListView)는 주로 같은 분류에 속하는 데이터를 나열하거나거나 그 데이터에 대한 개별적 처리를 하기위해 사용합니다. 예를들면 내가 개발하는 앱 내부에 어떤 분류의 게시글이 존재하며 그 게시글을 누르면 상세 내용을 볼 수 있도록 UI를 설계했다고 생각해봅시다. 어떤 배치가 좋을까요? TextView와 같은 위젯을 사용한다면 추가해야하는 게시글이 많아질 수록 Layout의 소스는 길어지고 관리도 힘들어질겁니다. 하지만 이를 하나의 리스트뷰로 보여준다면 Layout의 소스도 줄어들 뿐만 아니라 관리도 쉬워질 것 입니다. 앞서 설명드린 리스트뷰(ListView)는 하나의 리스트에 한 가지의 컨텐츠(예:텍스트)만 존재하는..
이번 포스팅은 안드로이트 4대 컴포넌트 중 액티비티의 생애주기에 관한 내용을 다루겠습니다. 1. ACITIVITY 액티비티는 안드로이드 프로그래밍을 배우면서 가장 먼저 접하게되는 컴포넌트입니다. 액티비티는 주로 화면에 보이는 UI에 관한 처리를 하기 위한 요소입니다. 예를 들면 화면에 버튼을 만들고 버튼을 눌렀을 때 이벤트를 처리하는 모든 과정이 액티비티에 담겨있습니다. 하지만 이런 액티비티에 생애주기라는 중요한 사이클 존이 있습니다. 이는 액티비티의 상태에 따라 특정 메서드를 호출해 작업을 수행하며, 구조적으로 데이터를 초기화하고 삭제하여 메모리나 CPU의 부하를 줄여주는 작업을 할 수도 있습니다. 액티비티의 상태라면 어떤 것 들이 있을까요? 아래와 같은 상황이 있을 수 있습니다. - CASE - - ..
지금까지 네비게이션 드로어와 프래그먼트를 연동하여 사용하는 방법에 대해 알아 보았는데요, 앞에서 만든 예제들은 '탄탄한 애플리케이션'을 위한 대비가 제대로 되어 있지 않습니다. 바로, '액티비티 생애주기'를 고려하고 있지 않습니다. 안드로이드 애플리케이션에서 화면을 표시하는 역할을 담당하는 액티비티는 동작 모습에 따라 여러 상태를 가지며, 각 상태가 변경될 때마다 그에 맞는 콜백 메서드가 호출되어 개발자가 각 상태에 알맞는 작업을 할 수 있게끔 구성되어 있습니다. 그런데, 액티비티는 별도의 예외 처리를 하지 않는 한 시스템 환경이 변할 때 새로 생성됩니다. 즉, 처음부터 다시 생애주기 메서드가 호출되므로 이전의 액티비티 상태 정보를 잃게 됩니다. 그러므로, 액티비티 상태가 변하더라도 기존에 사용하던 액티..
HttpClient 사용하기 - AndroidStudioAndroid SDK API 23부터는 HttpClient를 더이상 지원하지 않아 HttpClient 를 사용하기 위해서는 추가적인 작업이 필요합니다.useLibrary 추가 하기버전 다운그레이드 하기 useLibrary 추가 하기build.gradle(Module:app)에useLibrary'org.apache.http.legacy' 항목을 추가해 주세요android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "com.tistory.codedragon.a52newsxml" minSdkVersion 15 targetSdkVersion 23 versio..
스튜디오 쓰다보면 아파치 jar 포함해도안되고.... 기본으로도 아파치 없다고 하고.. 그럼... 해결방법import org.apache.http.client.HttpClient;해결방법app 내에 build.gradle 파일을 열자======================================================================================apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "패키지명" minSdkVersion 11 targetSdkVersion 23 versionCod..
Activity 호출시 발생하는 !!! FAILED BINDER TRANSACTION !!! 해결법.- startActivity 나 startActivityForResult 를 통해서 activity 를 실행시킬 때, 간혹가다 다음과 같은 결과를 볼 수 있습니다. E/JavaBinder(199): !!! FAILED BINDER TRANSACTION !!! - 저는 Gallery 로부터 Crop 된 이미지를 가져오는 데 이런 에러가 발생하며, 해당 앱의 프로세스가 미친듯이 늘어나는 현상을 겪었습니다. 원인- android 에서는 intent 를 통해 전달할 수 있는 데이터 양이 100KB 로 제한되어 있습니다. - 저는 Gallery 로부터 큰 이미지를 가져와서 100KB 를 넘겨서 발생한 문제로 보입니..