2012-09-17 2 views
5

만약 누군가가 컨트롤을 동적으로 생성 (인스턴스화 vs 인스턴스화)하기위한 모범 사례에 대해 통찰력을 발휘할 수 있는지 궁금합니다.Android에서 컨트롤을 확장하거나 인스턴스화하는 것이 더 낫습니까?

팽창 :

TextView styledText = (TextView)inflater.inflate(R.layout.styledTextView); 

인스턴스화 :

TextView styledText = new TextView(mContext); 
styledText.setTextAppearance(R.style.StyledTextStyle); 

목적은 팽창 된 XML 파일의 속성을 포함 할 수 있습니다 생성되는, 또는 인스턴스화 된 객체에 추가되는 스타일 정의에 포함 나중에. (이 스타일에는 너비, 배경, 텍스트 색상 등이 포함됩니다.)

는 각 방법의 시간/메모리 테스트를 실행할 수 없었던 사람이 빠른/가장 효율적인이었다 알고 있는지 궁금 해서요.

+0

흥미로운 메모. 텍스트 모양 메서드는 TextViews에서 작동하지만 비 텍스트 뷰 (Buttons, LinearLayouts 등)에서는 사용되지 않습니다. – Adam

답변

10

개체를 작성하기 위해 xml을 구문 분석해야하므로 LayoutInflator의 머리글 크기는 입니다. 또한 같은 이유로 더 일시적으로 메모리를 사용합니다. 그것 이외에, 당신은 어쨌든 동일한 방식으로 View 객체를 생성합니다. 어떤 이유로 든 초당 수백 번 호출하면 걱정할 수도 있습니다. 99.9 %의 시간은 당신이 그 차이를 결코 알지 못할 것입니다.

또한 "setTextAppearance"것 같은 XML 파싱 오버 같은 XML 자원을 받아들이는 임의의 방법을 참고한다. 제공 한 예제의 유일한 차이점은 TextView XML을 구문 분석하지 않는다는 것입니다.하지만 여전히 스타일 속성을 구문 분석해야합니다. 이 게시물은 특별히 컨트롤에 대한 요구하지만

0

, 당신이 동적으로 생성/추가 할 레이아웃 작업을위한 ..이 점에 유의하는 관련이 생각 나는 new (일명 인스턴스화) 접근 방식을 사용하여 발견, 나는 아니었다은 레이아웃 객체 참조를 인스턴스화하는 xml 파일에 정의 된 내부 ImageButton 요소에 대한 참조를 가져올 수 있습니다. I는 inflate 접근법을 사용할 때

은 참조하여 ImageButton시 존재 하였다. 그래서 내 경우

:

작품 :

LayoutInflater inflater = LayoutInflater.from(getActivity()); 
    CardView myCardView = (CardView) inflater.inflate(R.layout.my_cardview, null); 
    ImageView icon = (ImageView) myCardView.findViewById(R.id.iconId); 

~~~~~~~~~~~~은 :(를 작동하지 마십시오 .. 변수 아이콘이 null 인 경우

CardView myCardView = new Ca rdView (getActivity());

이미지 뷰 아이콘 = (이미지 뷰) myCardView.findViewById (R.id.iconId);

+1

CardView가 사용자가 만든 사용자 정의보기가 아니라고 가정합니다. 두 번째 접근 방식으로 아이콘을 검색 할 수없는 이유는 분명합니다. 당신의 레이아웃은 그 안에 아이콘을 가지고 있으며, 인플레이터가 그것을 만들고, 두 번째 접근법은 빈 CardView를 인스턴스화 만합니다. 앞으로이 질문에 걸림돌이되는 사람을 위해 의견을 남기십시오. – LeoFarage

+0

CardView가 사용자가 만든 사용자 정의보기가 아니라고 가정합니다. 두 번째 접근 방식으로 아이콘을 검색 할 수없는 이유는 분명합니다. 당신의 레이아웃은 그 안에 아이콘을 가지고 있으며, 인플레이터가 그것을 만들고, 두 번째 접근법은 빈 CardView를 인스턴스화 만합니다. 앞으로이 질문에 걸림돌이되는 사람을 위해 의견을 남기십시오. – LeoFarage