상황에 따라 레이아웃 팽창기를 얻는 방법?


226

ListAdapter의 사용자 지정 구현을 작성 중입니다.

생성자에서는 컨텍스트, 리소스 ID (예 : 레이아웃 파일을 나타내는 R.id.xxx), 목록 및 맵 (데이터가 포함됨)을 사용합니다.

이제 문제는 별도의 레이아웃 XML 파일에있는 View 객체를 가져 오기 위해 LayoutInflater가 필요하다는 것입니다.

컨텍스트 만 주어진 LayoutInflater를 어떻게 잡을 수 있습니까?

이제 이것이 가능하다고 생각하는 이유는 이것이 ArrayAdapter의 생성자 (context, resource, textViewResourceId, data array)에 전달되는 것과 매우 유사하고 ArrayAdapter도 사용해야한다는 것입니다. Context 만 주어진 LayoutInflater.

그러나 어떻게 할 수 있습니까?

답변:


515

클래스 에서 static from()메소드를LayoutInflater 사용할 수 있습니다 .

 LayoutInflater li = LayoutInflater.from(context);

11
감사! Context.getSomething (). getAnotherThing (). getLayoutInflater ()를 찾으려고했습니다!
Edwin Lee

이것은 나를 위해 일한 유일한 방법입니다. 내가 지금까지 시도한 다른 모든 것들은 예외를 던졌습니다.
num1

4
필요할 때마다 팽창기를 얻는 것이 비쌉니다. 즉, 팽창기의 일원을 구해야한다고 생각하십니까?
AlikElzin-kilaka

BTW 궁극적으로 LayoutInflater.from (context)이 내부에서 동일하게 수행되므로 LayoutInflater li = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE)를 사용해야한다고 생각합니다.
Ankur Chaudhary

3
어느 쪽이 더 좋은
가요

53

이 코드를 사용하여 LayoutInflater를 얻을 수도 있습니다.

LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)

40
LayoutInflater.from (Context ctx)와이 getSustemService (...)의 차이점은 무엇입니까?
Teo Choong Ping

8
좋은 질문을 위해 +1, LayoutInflater.from (context) 메소드를 구현할 때 context.getSystemService ()를 호출하여 System Manager에서 LayoutInflater 서비스 공급자를 가져옵니다. 따라서 호출 스택에 약간의 차이가있을 수 있습니다.
NguyenDat

11
인플레이터를 검색 할 수없는 경우 LayoutInflater.from (context)도 오류를 발생시킵니다. 여기 코드 : public static LayoutInflater from (Context context) {LayoutInflater LayoutInflater = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE); if (LayoutInflater == null) {throw new AssertionError ( "LayoutInflater를 찾을 수 없습니다."); } 반환 LayoutInflater; }
Hiep
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.