57

線形レイアウトを動的に設定しています。応答に応じて、過去の子ビューをクリアし、新しいビューを作成する必要があります。私はドキュメントを読みましたが、まだいくつかのメソッドと混同されています.それらはすべて同じ機能に見えます. どの関数を使用する必要がありますか。

4

3 に答える 3

21

removeAllViews(): ViewGroup からすべての子ビューを削除するには、このメソッドを呼び出します。 removeAllViewsInLayout(): ViewGroup サブクラスによって呼び出され、それ自体から子ビューを削除します。これは、レンダリングする子ビューの数を計算する前に、画面上のサイズを最初に知る必要がある場合です。

于 2013-03-22T13:30:17.653 に答える
13

Well, looking at the source, there isn't much difference:

public void removeAllViews() {
    removeAllViewsInLayout();   // Details implemented here
    requestLayout();
    invalidate(true);
}

So unless you want to call invalidate() at a time of your choosing, you might as well use removeAllViews() and save yourself a bit of typing.

EDIT
For a more detailed explanation, see David Lui's answer. To sum it up, use removeAllViews() unless you're in the process of constructing a View--in which case you'd call removeAllViewsInLayout().

于 2016-06-24T16:30:21.573 に答える