addView を使用するウィジェットや、場合によっては addViewInLayout を使用するウィジェットを見てきました。
それらの違いは何ですか?1つを別のものに置き換えるとどうなりますか?
レイアウト中にフラグを保持し、それに応じて「addViewInLayout」または「addView」を使用する必要がありますか?
ありがとう。
BR、ヘンリー
ps。タグを追加: removeview、removeviewinlayout
addViewInLayout
レイアウト中にビューを追加します。これは、onLayout() メソッドでさらにビューを追加する必要がある場合に便利です (たとえば、リスト ビューのように)。index が負の場合、それはリストの最後に置くことを意味します。
addView
渡された LayoutParams を渡された View に割り当て、ビューをウィンドウに追加します。
*addView はViewManager
、子ビューをアクティビティに追加および削除できるようにするインターフェイスである によって実装されるため、実行時に (動的に) ビューを ViewGroup に追加できることに注意してください。また、addViewInLayout は ViewGroup の保護されたメソッドであるため、カスタム ビュー グループを作成する場合はaddViewInLayout()
、onLayout()
メソッドで呼び出すことができます。
詳細については、これを参照してください
例: レイアウト (mLayout) があり、このレイアウトに 2 つのビュー (view1、view2) を追加したい場合、2 つの方法 (同じ) があります。
case1: 次のコマンドを使用するだけです
mLayout.addView(view1); //onLayout() will be called first time
mLayout.addView(view2); //onLayout() will be called second time after the first time.
この場合、関数 onLayout() は気にしません。簡単なソースコードです。
case2: 複雑だがパフォーマンスは向上
//do something to <global variable>
bCheck = true; //check it in fuction onLayout()
requestLayout(); //use this function to call onLayout() function for only one time
//in onLayout() function of mLayout, you use addViewInLayout()
//addViewInLayout() dont call onLayout() function, so you can add 2 views with only one time to call onLayout()
//onLayout() is abstract function, so mLayout is a instant of subclass of ViewGroup (ex: RelativeLayout, LinearLayout....)
@Override
onLayout(boolean changed, int l, int t, int r, int b)
if(bCheck == true){
v.addViewInLayout(view1); //add view1 to mLayout
v.addViewInLayout(view1); //add view2 to mLayout
bCheck = false;
}
}
});
テストする時間がありません。誰でも私がそれをより明確にするのを助けることができます。