posted by Kyleslab 2012. 11. 13. 18:34

layout xml을 만들때 다른 xml layout을 include라는 명령어로 포함시킬수 있습니다. 반복적으로 사용되는 layout인경우 자주이렇게 합니다. 



여기서 생긴궁금증 include가 포함된 xml레이아웃을 setContentView등으로 inflate를 시킨다면 include된 xml레이아웃 안의 뷰들도 inflate되어 바로 사용할 수 있을까?


정답은 가능합니다. 




    

가령 이런경우 레퍼런스 사이트에서는 layout_textview xml안에있는 뷰들을 소스코드에서 사용하려면 위의 예제처럼 id를 주어 먼저 불러오고 사용하게 되있습니다. 가령 이런식입니다. 


// layout_textview를 받아온다. layout_textview를 받아온 View textView 객체는 하위 자식들을 그대로 포함하고 있다.
        // 이렇게 받아온 View textView는 layout_textview의 root뷰이다.
        View textView = (View)findViewById(R.id.main_layout_textview);
         
        // 받아온 textview를 통해 해당 View가 가진 하위 자식들을 받아온다.(reference한다.)
        TextView tv01 = (TextView)textView.findViewById(R.id.layout_textview_01);
        TextView tv02 = (TextView)textView.findViewById(R.id.layout_textview_02);

하지만 상식적으로 생각해볼때 include의 명령어는 java의 inline명령어처럼 그부분에 xml코드를 대입해준것 불과합니다. 그러므로 include부분에 id를 줄필요도 다르게 생각할 필요도 없습니다. 그냥 원래 포함된 레이아웃인양 사용하면됩니다. 왜냐하면 setContentView에서 해당 xml전체를 inflate시켰기때문입니다. 다시말해 위와 같은 작업이 필요없습니다. 그냥 아래처럼 id만주면 사용할 수 있습니다.


        TextView tv01 = (TextView)findViewById(R.id.layout_textview_01);
        TextView tv02 = (TextView)findViewById(R.id.layout_textview_02);


'Mobile > Android' 카테고리의 다른 글

안드로이드 SQLite 속도 향상!  (0) 2013.03.26
Error generating final archive: Debug certificate expired on ... 문제해결법  (0) 2013.03.13
JNIEnv* 와 jclass  (0) 2012.11.13
JNI를 Xcode이용하기  (2) 2012.11.13
Fragment(2)  (0) 2012.11.12