[Android] 레이아웃 인플레이션, 액티비티, 인텐트
레이아웃 인플레이션
- xml레이아웃 파일의 내용은 애플리케이션이 실행될 때 메모리로 로딩되어 객체화된다. 이렇게 xml 레이아웃에 정의된 내용이 메모리 상에 객체화되는 과정을 '인플레이션(Inflation)'이라고 한다.
첫 번째는화면에 나타낼 뷰를 지정하는 역할이고
두 번째는 xml 레이아웃의 내용을 메모리 상에 객체화하는 역할입니다.
[Reference]
public void setContentView(int layoutResID)
public void setContentView(View view[, ViewGroup.LayoutParams params])
- setContentView() 메소드는 액티비티의 화면 전체를 설정하는 역할을 하므로 화면 전체가 아닌 일부뷰만을 위한 xml 레이아웃을 메모리 상에 객체화 하려면 LayoutInflater라는 클래스가 필요, 이 클래스는 시스템 서비스로 제공되므로 다음과 같은 코드를 이용하여 LayoutInflater 객체를 참조한 후 사용합니다.
getSystemService(Context.LAYOUT_INFLATER_SERVICE)
Activity
- 안드로이드에서는 일반적으로 하나의 화면을 하나의 액티비티로 생각 할 수 있다 액티비티는 애플리케이션을 구성하는 네 가지 기본 요소 중의 하나로 대부분의 애플리케이션이 적어도 하나 이상 포함하고 있습니다.
안드로이드 애플리케이션의 네가지 구성요소는
- 액티비티(Activity)
- 서비스(Service)
- 브로드캐스트 수신자(Broadcast Receiver)
- 내용 제공자(Content Provider)
입니다.
- 애플리케이션 구성요소가 중요한 이유는 이들 각각의 구성요소들은 애플리케이션이 만들어져 설치되면 안드로이드 시스템이 이들에 대한 정보를 요구하기 때문입니다.
- 프로젝트를 만들면 자동으로 만들어지는 파일 중에 AndroidManifest.xml 파일이 있습니다. 그 안에는 애플리케이션에 대한 다양한 정보가 들어가는데, 만약 새로운 액티비티를 만들어 애플리케이션에 추가한다면 동시에 이 매니페스트 파일에 그 액티비티 정보를 추가해야 합니다. 이오 같이 애플리케이션을 구성하는 구성요소 네 가지는 새로 만들 때마다 항상 그 정보를 매니페스트 파일에 추가해야 하며, 이를 통해 애플리케이션을 구성하고 있는 정보를 시스템에 알려줄 수 있습니다.
- 이 중에서 액티비티는 setContentView() 메소드를 이용해 화면에 보이도록 하는 요소들을 디스플레이 합니다. 액티비티를 띄우기 위해 사용한 메소드가 startActivitty()인데 이 메소드는 단순히 액티비티를 띄워 화면에 보이도록 만듭니다.
- 단순히 액티비티를 띄워주는 것이 아니라 어떤 액티비티를 띄운 것인지 그리고 띄웠던 액티비로부터의 응답을 받아 처리하는 코드가 필요, 이런 문제로 쓰이는 메소드가 startActivityForResult()가 정의되어 있습니다.
[Reference]
strartActivityForResult(Intent intent, int requestCode)
[Reference]
protected void onActivityResult(int requestCode, int resultCode, Intent intent)
- onActivityResult()메소드는 띄웠던 액티비티가 응답을 보내오면 그 응답을 처리하는 역할을 합니다. 이 메소드의 첫 번째 파라미터는 액티비티를 띄울 때 전달했던 코드와 같으므로 어떤 액티비티로부터 응답을 받은 것인지 구분할 때 사용됩니다. 두 번째 파라미터는 응답을 보내온 액티비티로부터 전달된 값으로 임의의 코드이긴 하지만 일반적을 성공(200), 실패(400)와 같이 액티비티의 기능을 수행한 결과 값을 전달하게 됩니다. 세 번째 파라미터는 응답을 보내 온 액티비티로부터 전달한 인텐트로 필요한 데이터가 있을 때 인텐트에 데이터를 넣어 전달하게 됩니다.
- setResult() 메소드는 현재 액티비티를 띄운 액티비티로 응답을 보낼 때 사용됩니다. 이 메소드에는 두 개의 파라미터가 사용된 것을 볼 수 있는데 첫 번째 파라미터는 메인 액티비티의 onActivityResult() 메소드에서 전달받은 결과 코드이며, 두 번째 파라미터는 인텐드 객체입니다.
- 인텐트 객체에 데이터를 넣는가장간단한 방법은 문자열을 putExtra() 메소드로 설정하는 것입니다. 이 메소드를 이용할 때는 키(Key)와 데이터 값(Value)을 쌍으로 넣어 주어야 합니다. 이 값을 다시 확인하고자 할 경우에는 키 값을 이용해 데이터 값을 가져올 수 있습니다.
- 액티비티 추가와 요청 그리고 응답 과정
- 새로운 액티비티의 XML 레이아웃 정의
- 새로운 액티비티 코드 작성
- 메인 액티비티에 요청 코드 정의
- 새로운 액티비티 띄우기
- 새로운 액티비티에서 응답 보내기
- 메인 액티비티에 응답 처리 코드 정의
- 매니페스트 파일에 액티비티 정의 추가
댓글 없음: