web-dev-qa-db-ja.com

LinearLayoutから子要素を取得する

LinearLayoutの子要素を取得する方法はありますか?私のコードはビュー(linearlayout)を返しますが、レイアウト内の特定の要素にアクセスする必要があります。

助言がありますか?

(はい、findViewByIdを使用できることは知っていますが、レイアウト/子をJava-XMLではなく)で作成しています。)

51
Cody

いつでも次のようなことができます。

LinearLayout layout = setupLayout();
int count = layout.getChildCount();
View v = null;
for(int i=0; i<count; i++) {
    v = layout.getChildAt(i);
    //do something with your child element
}
80
Aleks G

これが役立つと思います: findViewWithTag()

TAGをレイアウトに追加するすべてのビューに設定し、IDを使用する場合と同様に、タグでそのビューを取得します

19
Asahi

ビューの子から要素を静的に取得することは避けます。現在は動作する可能性がありますが、コードの保守が難しくなり、将来のリリースで破損しやすくなります。上記のように、適切な方法は、タグを設定し、タグによってビューを取得することです。

4
THE_DOM
LinearLayout layout = (LinearLayout)findViewById([whatever]);
for(int i=0;i<layout.getChildCount();i++)
    {
        Button b =  (Button)layout.getChildAt(i)
    }

それらがすべてボタンである場合、そうでない場合はクラスを表示して確認するためにキャストします

View v =  (View)layout.getChildAt(i);
if (v instanceof Button) {
     Button b = (Button) v;
}
3
Anna Billstrom

このようにすることができます。

ViewGroup layoutCont= (ViewGroup) findViewById(R.id.linearLayout);
getAllChildElements(layoutCont);
public static final void getAllChildElements(ViewGroup layoutCont) {
    if (layoutCont == null) return;

    final int mCount = layoutCont.getChildCount();

    // Loop through all of the children.
    for (int i = 0; i < mCount; ++i) {
        final View mChild = layoutCont.getChildAt(i);

        if (mChild instanceof ViewGroup) {
            // Recursively attempt another ViewGroup.
            setAppFont((ViewGroup) mChild, mFont);
        } else {
            // Set the font if it is a TextView.

        }
    }
}
2
Ali