[解決済み] Android - カスタム(複合)コンポーネントの作成
質問
現在開発中のAndroidアプリには、かなり大きくなったメインアクティビティがあります。これは主に
TabWidget
に 3 つのタブがあるためです。各タブには、かなりの数のコンポーネントがあります。アクティビティは、これらすべてのコンポーネントを一度に制御する必要があります。したがって、このアクティビティには20のフィールドがあることが想像できると思います(ほとんどすべてのコンポーネントにフィールドがあります)。また、多くのロジック(クリックリスナー、リストへの入力ロジックなど)も含まれています。
コンポーネントベースのフレームワークで私が通常行うことは、すべてをカスタムコンポーネントに分割することです。各カスタム コンポーネントには、明確な責任があります。それは、独自のコンポーネントのセットと、そのコンポーネントに関連する他のすべてのロジックを含んでいます。
これをどのように行うか考えてみたところ、Android のドキュメントで「複合コントロール (Compound Control)」と呼ばれるものを見つけました。 http://developer.android.com/guide/topics/ui/custom-components.html#compound を参照し、quot;Compound Controls のセクションまでスクロールしてください) ビュー構造を定義する XML ファイルに基づいて、このようなコンポーネントを作成したいと思います。
ドキュメントでは、次のように書かれています。
Activity.と同じように のように、宣言的な(XMLベースの)アプローチを使用することができます。 (XMLベース)アプローチで または、コードからプログラム的にネストすることができます。 プログラム的に作成することができます。
これはいいニュースです。XML ベースのアプローチは、まさに私が欲しいものです! しかし、その方法は、"Activity" のようなものであること以外は書かれていません。でも、私がActivityでやっていることは
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が存在することになります。
誰か、これにアプローチする良い方法を教えてください。
LinearLayout
がインスタンス化されるのを避けるためです。
どのように解決するのですか?
使用方法
マージ
タグをXMLのルートとして使用します。
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Your Layout -->
</merge>
関連
-
Android Studio 3.1.2 で v4, v7 パッケージが見つからない シンボル 'AppCompatActivity' を解決できない
-
eclipse の実行時に java 仮想マシンが見つからなかった
-
リソースの読み込みに失敗しました。サーバーはステータス500(内部サーバーエラー)で応答しました。
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] アプリケーションを終了することは嫌われますか?
-
[解決済み] グリッドレイアウトにおけるフリングジェスチャーの検出
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み】なぜJavaの+=, -=, *=, /=複合代入演算子はキャスティングを必要としないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Eclipseで "XXXX "の解決策を(型に)解決することができない
-
javaの模造品QQ WeChatのチャットルーム
-
this()の呼び出しはコンストラクタ本体の最初の文でなければならない 例外解決と原因分析
-
JavaMailのメール送信が失敗するケースとその説明の分析
-
eclipse の実行時に java 仮想マシンが見つからなかった
-
Eclipseプロンプトを実行する java仮想マシンを使用しない
-
javaコンパイル時のエラー:不正な文字 '\ufeff' に対する解決策です。
-
が 'X-Frame-Options' を 'deny' に設定しているため、フレーム内にある。
-
spring aop アドバイスからの Null 戻り値が、サマリーのプリミティブ戻り値と一致しない。
-
mavenプロジェクトのテストエラー java.lang.ClassNotFoundException: org.glassfish.jersey.client.ClientConfig の問題を解決する。