[Android] 레이아웃 인플레이션, 액티비티, 인텐트

레이아웃 인플레이션


  • xml레이아웃 파일의 내용은 애플리케이션이 실행될 때 메모리로 로딩되어 객체화된다. 이렇게 xml 레이아웃에 정의된 내용이 메모리 상에 객체화되는 과정을 '인플레이션(Inflation)'이라고 한다.
seContentView() 메소드의 역할은 크게 두 가지로 나뉜다.
첫 번째는화면에 나타낼 뷰를 지정하는 역할이고
두 번째는 xml 레이아웃의 내용을 메모리 상에 객체화하는 역할입니다.

[Reference]
public void setContentView(int layoutResID)
public void setContentView(View view[, ViewGroup.LayoutParams params])

  • setContentView() 메소드는 액티비티의 화면 전체를 설정하는 역할을 하므로 화면 전체가 아닌 일부뷰만을 위한 xml 레이아웃을 메모리 상에 객체화 하려면 LayoutInflater라는 클래스가 필요, 이 클래스는 시스템 서비스로 제공되므로 다음과 같은 코드를 이용하여 LayoutInflater 객체를 참조한 후 사용합니다.
[Reference]
getSystemService(Context.LAYOUT_INFLATER_SERVICE)

Activity

  • 안드로이드에서는 일반적으로 하나의 화면을 하나의 액티비티로 생각 할 수 있다 액티비티는 애플리케이션을 구성하는 네 가지 기본 요소 중의 하나로 대부분의 애플리케이션이 적어도 하나 이상 포함하고 있습니다.


안드로이드 애플리케이션의 네가지 구성요소는

  1. 액티비티(Activity)
  2. 서비스(Service)
  3. 브로드캐스트 수신자(Broadcast Receiver)
  4. 내용 제공자(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)을 쌍으로 넣어 주어야 합니다. 이 값을 다시 확인하고자 할 경우에는 키 값을 이용해 데이터 값을 가져올 수 있습니다.
  • 액티비티 추가와 요청 그리고 응답 과정
  1. 새로운 액티비티의 XML 레이아웃 정의
  2. 새로운 액티비티 코드 작성
  3. 메인 액티비티에 요청 코드 정의
  4. 새로운 액티비티 띄우기
  5. 새로운 액티비티에서 응답 보내기
  6. 메인 액티비티에 응답 처리 코드 정의
  7. 매니페스트 파일에 액티비티 정의 추가

댓글 없음:

Powered by Blogger.