2013-05-07 6 views
7

私はいくつかのウィジェットをaddViewと、時にはaddViewInLayoutを使って見たことがあります。addViewとaddViewInLayoutの違いは何ですか

これらの違いは何ですか? 1つ置き換えるとどうなりますか?

レイアウト中にフラグを保持し、それに従って「addViewInLayout」または「addView」を使用する必要がありますか?

ありがとうございました。

BR、 ヘンリー

PS。複数のタグを追加する:removeview、

答えて

15

そのを参照してください。つまり、レイアウトの途中でレイアウトをトリガーすることになります。

addViewInLayoutは、実際にonLayoutに新しいビューを追加する必要がある場合は、addViewの「より安全な」バージョンです。基本的にはレイアウト・パスをトリガーしません(内部でrequestLayoutを呼び出さない)。我々はレイアウト(mLayout)を持っていて、これがあるlayout.soに2つのビュー(VIEW1、VIEW2)を追加したい:例えばhttp://www.youtube.com/watch?v=HbAeTGoKG6k

5

removeviewinlayout addViewInLayout

レイアウト中にビューを追加します。これは、onLayout()メソッドでもっと多くのビューを追加する必要がある場合に便利です(リストビューなど)。 indexが負の場合、それはリストの最後に置くことを意味します。

addView

渡されたビューに渡されたLayoutParamsを割り当て、ウィンドウにビューを追加します。

※addViewは、子ビューをアクティビティに追加したり削除したりするためのインターフェイスであるViewManagerによって実装されているため、実行時にViewGroupにビューを追加することができます(DYNAMICALLY)。また、addViewInLayoutはViewGroupの保護されたメソッドなので、カスタムビューグループを作成する場合は、メソッドでaddViewInLayout()を呼び出すことができます。

addViewが内部で最終的にonLayoutを呼び出しますrequestLayoutトリガーするため、よりonLayoutaddViewを呼び出すために、一般的に悪い考えをthis

+0

ご返信ありがとうございます。 これらはAndroidデベロッパーガイドから単純にコピーされています。 と私は本当に知りたいものではありません。 「実際の」違いは か、「コード」の違いを言うかもしれません。 まだありがとうございます。 – Henry

+0

これは、私は任意のビューグループオブジェクトで呼び出すことができるaddViewを説明し、カスタムビューグループを作成するときにaddViewInLayoutをonLayout()メソッドのフォームと呼びます。 –

1

詳細について(アンドロイドエンジニアによって)このビデオを参照してください。 2つの方法(同)

ケース1:単にあなたが、この場合、コマンド

mLayout.addView(view1); //onLayout() will be called first time 
mLayout.addView(view2); //onLayout() will be called second time after the first time. 

次使用は、あなたが機能onLayoutを気にしません()。シンプルなソースコードです。

事例2:私はそれをテストする時間がない複雑なく、より良いパフォーマンス

//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; 
      } 

     } 
    }); 

。誰でも私がそれをより明確にするのを助けることができます。

関連する問題