現在開発中のAndroidアプリのメインアクティビティは非常に大きくなっています。これは主に、TabWidget
タブが3つあるです。各タブにはかなりの数のコンポーネントがあります。アクティビティは、これらすべてのコンポーネントを一度に制御する必要があります。このアクティビティには20のフィールド(ほとんどすべてのコンポーネントのフィールド)があると想像できると思います。また、多くのロジック(クリックリスナー、リストを満たすためのロジックなど)も含まれています。
コンポーネントベースのフレームワークで私が通常行うことは、すべてをカスタムコンポーネントに分割することです。その場合、各カスタムコンポーネントには明確な責任があります。独自のコンポーネントセットと、そのコンポーネントに関連する他のすべてのロジックが含まれます。
私はこれをどのように行うことができるかを理解しようとしました、そして、彼らが「複合コントロール」と呼ぶのが好きであるものをAndroidドキュメントで見つけました。(http://developer.android.com/guide/topics/ui/custom-components.html#compoundを参照し、[複合コントロール]セクションまでスクロールします)このようなコンポーネントを、XMLファイルに基づいて作成したいビューの構造。
ドキュメントではそれは言う:
アクティビティの場合と同様に、含まれているコンポーネントを作成するために宣言型(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
!! これで、冗長なLinearLayoutとその間MyCompoundComponent
に実際に必要なビューができました。
誰かがこれにアプローチするより良い方法を私に提供して、冗長なLinearLayout
インスタンス化を避けることはできますか?