android - LayoutInflater.inflater的问题?
黄舟
黄舟 2017-04-17 17:36:02
0
2
441

新手,在看inflater的时候有点疑问
在LayoutInflater.inflater(int resId,ViewGroup root,boolean attchtoroot)这个方法中,
其中第三个参数是什么意思,什么时候用true,什么时候用false?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全員に返信(2)
大家讲道理

簡単に言うと、各 View がそのレイアウト位置を決定するために LayoutParams を必要とする場合、Layout リソース ファイル内で作成したレイアウト プレフィックス設定は基本的に LayoutParams に記録されます。ただし、LayoutParams は現在の View に基づいて生成されるのではなく、親 View に基づいて定義されます。たとえば、TextView が LinearLayout 内に存在する場合、TextView は LinearLayout.LayoutParams に基づく LayoutParams を持ちます。これは、この方法で TextView が LinearLayout に固有のレイアウト属性をいくつか持つことになるためです。
まさにそのとおりです。LayoutInflater.inflater を使用してリソース ファイルからビューをロードする場合、この時点で、トップレベルのビューには親ビューが存在しない可能性があります。最も基本的な LayoutParams が使用され、失われます。パラメーターが失われないようにするために、親 View への参照である root を提供できます。これは、使用する LayoutParams がルート クラスによって提供される LayoutParams と一貫していることを示します。通常の状況では、一貫性を確保しやすくするために、ロードされた View が結合する親 View オブジェクトを指定します。
3 番目の項目 attchToRoot は、実際にはショートカット操作です。つまり、root を参照として使用すると、ビューも root に追加されて、root のサブビューになります。 Android のデフォルトのオーバーロードでは、root を指定し、それが空でない場合、attchToRoot の値は true になります。これは、ビューがデフォルトで root に追加されることを意味します。
root と true は Android で使用されるデフォルトのメソッドですが、通常はこの方法では使用しません。LayoutInflater.inflater には非常に特殊な戻りメソッドがあるためです。つまり、渡した attchToRoot が true の場合、 LayoutInflater。インフレーターは、ロードされたビュー自体の代わりに root を返します。通常の状況では、ビューをロードするときに、ビュー上で何らかの割り当て操作を実行したいと考えます。つまり、ビュー自体を直接取得することを好みます。したがって、通常は root と false の組み合わせになります。 View に値を割り当てた後、それを root に追加します。

いいねを押す +0
小葫芦

@ 有明さんの答えはこれ以上に素晴らしいものはありません。
投稿者がさらにコンテンツを参照する必要がある場合は、公式ドキュメントをお読みください

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート