Android: Inflate

ericbyeric·2021년 6월 28일
0

Android

목록 보기
5/6
post-thumbnail

Inflate

안드로이드 예제들을 보다 보면 listView나 RecyclerView를 구현하기 위해서 getView()라는 메서드 안에 Inflate이라는 함수를 사용하게 된다. 이때 정확히 이 Inflate이라고 하는놈이 어떤 역할을 하는지 궁금하지 않니? 나는 궁금해.. 그래서 알아보았다.

What is Inflate?

Inflate의 뜻은 "부풀게 하다"이다
Android에서 Inflate의 의미는 Xml에 표기된 Layout들을 메모리에 객체화 시키는 것이야. 간단히 말하면 Xml로 만들어진 Layout을 객체화 시킨다고 이해하면되.

ActivityMain에서의 Inflate

우리가 Android에서 화면을 하나 생성하면 (Activity 생성) 화면을 구성하는 Xml Layout과 그 화면을 통제하는 소스코드 (ex. MainActivity.java)가 생성되. MainActivity.java에서 onCreate메서드 안의 setContentView()메서드가 이 Xml을 객체화시키는 Inflate야!

pubic class MainActivity extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
    	super.onCreate(savedInstanceState);
        // activity_main.xml을 inflate(객체화) 하는 과정.
        setcontentView(R.layout.activity_main);
        // TextView객체를 가져와.
        TextView tv1 = findViewById(R.id.tvid);
    }
}

그래서 MainActivity.java에서 findViewById(R.id.viewid)를 바로 사용할 수 있는것도 Main Xml Layout이 setContentView()에 의해 이미 Inflate되어서 그런거야. Understand?

여기까지 1차 깨달음 :)

다른 상황에서의 Inflate

다른 화면을 불러 오고 싶을때도 Xml Layout을 inflate해야겠지?
방식은 다양할 수 있어.
그래서 어떻게 하면 손쉽게 여러 Xml Layout을 객체화 시킬 수 있을까?

LayoutInflater inflater = getLayoutInflater();
View v1 = inflater.inflate(R.layout.activity_sub, null);
View v2 = inflater.inflate(R.layout.activity_main, null);
View v3 = inflater.inflate(R.layout.activity_row, null);

여러 Xml을 inflate해서 최상위 부모 참조 변수 (View_에 담아놔.
=> 이 과정까지가 메모리를 객체위에 올려놓은 과정!
이제 자유롭게 각 Xml의 UI객체에 접근이 가능.

TextView tv1 = (TextView) v1.findViewById(R.id.tv_id);
ImageView iv1 = (ImageView) v1.findViewById(R.id.iv_person);
Button btn1 = (Button) v2.findViewById(R.id.btn_password);

이렇게 TextView, ImageView, Button값들을 자유로히 가져다 쓸 수 있어.

정리해보자면
Xml을 Inflate한다는 것은 Xml 소스를 메모리에 올려 객체화 시켜서 접근이 용이하게 만든다!

profile
인생의 해상도를 올려볼까나

0개의 댓글