현재 개발중인 Android 앱에는 주요 활동이 상당히 커졌습니다. 주로 TabWidget
3 개의 탭이 포함되어 있기 때문 입니다. 각 탭에는 몇 가지 구성 요소가 있습니다. 활동은 모든 구성 요소를 한 번에 제어해야합니다. 이 액티비티에 20 개의 필드 (거의 모든 구성 요소에 대한 필드)가 있다고 상상할 수 있습니다. 또한 많은 로직 (클릭 리스너, 목록을 채우는 로직 등)이 포함되어 있습니다.
구성 요소 기반 프레임 워크에서 일반적으로하는 일은 모든 것을 사용자 지정 구성 요소로 나누는 것입니다. 그러면 각 사용자 지정 구성 요소에 명확한 책임이 있습니다. 자체 구성 요소 집합과 해당 구성 요소와 관련된 다른 모든 논리를 포함합니다.
나는 이것을 어떻게 할 수 있는지 알아 내려고 노력했고, 안드로이드 문서에서 그들이 "복합 제어"라고 부르는 것을 발견했다. ( http://developer.android.com/guide/topics/ui/custom-components.html#compound를 참조 하고 "Compound Controls"섹션으로 스크롤하십시오.) 뷰 구조.
설명서에서 다음과 같이 말합니다.
액티비티와 마찬가지로 선언적 (XML 기반) 접근 방식을 사용하여 포함 된 구성 요소를 만들거나 코드에서 프로그래밍 방식으로 중첩 할 수 있습니다.
좋은 소식입니다! XML 기반 접근 방식은 내가 원하는 것입니다! 그러나 "액티비티와 같은 것"을 제외하고는 어떻게 해야하는지 말하지 않습니다. 그러나 액티비티에서 내가하는 일은 setContentView(...)
XML에서 뷰를 부풀려 야한다는 것입니다. 서브 클래스와 같은 경우에는이 메소드를 사용할 수 없습니다 LinearLayout
.
그래서 다음과 같이 XML을 수동으로 부풀 리려고했습니다.
public class MyCompoundComponent extends LinearLayout {
public MyCompoundComponent(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.my_layout, this);
}
}
내가로드하는 XML LinearLayout
이 루트 요소로 선언 되었다는 사실을 제외하고는 작동합니다 . 이로 인해 팽창 된 LinearLayout
어린이가 MyCompoundComponent
이미 그 자체입니다 LinearLayout
! 이제 우리는 MyCompoundComponent
실제로 필요한 뷰와 뷰 사이에 여분의 LinearLayout을 갖습니다 .
누군가 중복 된 LinearLayout
인스턴스화를 피하면서 더 나은 방법으로 접근 할 수 있습니까 ?