LinearLayout içindeki tüm çocuk görüntülerini bir kerede alın


140

Bir var LinearLayoutbir kaç çocuğu içeren, TextViews. Bir döngü kullanarak bu LinerLayout'un alt görünümlerini nasıl alabilirim?

Yanıtlar:


282

Kullanım getChildCount()ve getChildAt(int index).

Misal:

LinearLayout ll = 
final int childCount = ll.getChildCount();
for (int i = 0; i < childCount; i++) {
      View v = ll.getChildAt(i);
      // Do something with v.
      // …
}

Merhaba Yashwanth Kumar, tüm Lineerlayout'taki TextView'leri alabilir miyim?
Hai nguyen

15
@ hai-nguyen: Bunun için if (v instanceof TextView) {...} kullanabilirsiniz.
Anoop

3
çocuklardan biri bir ViewGroup ise ve tüm bu çocukları da almak istiyorsak?
Hendra Anggrian

Nasıl toplam hayır alabilirsiniz buttonsdoğrusal bir düzende ilave ve tarafından bölmek 2 ? Amacım doğrusal düzen kullanarak 2 satır düğme göstermek .
Jay Rathod RJ

39
((ViewGroup) findViewById(android.R.id.content));// you can use this in an Activity to get your layout root view, then pass it to findAllEdittexts() method below.

Burada sadece EdiTexts'i yineliyorum, tüm Görünümleri istiyorsanız EditText'i View ile değiştirebilirsiniz.

SparseArray<EditText> array = new SparseArray<EditText>();

private void findAllEdittexts(ViewGroup viewGroup) {

    int count = viewGroup.getChildCount();
    for (int i = 0; i < count; i++) {
        View view = viewGroup.getChildAt(i);
        if (view instanceof ViewGroup)
            findAllEdittexts((ViewGroup) view);
        else if (view instanceof EditText) {
            EditText edittext = (EditText) view;
            array.put(editText.getId(), editText);
        }
    }
}

Sadece açıklığa kavuşturmak için, yinelemeli olarak yapmak, getChildAtsadece doğrudan çocukları döndürür
YoussefDir

4

bunu kullan

    final int childCount = mainL.getChildCount();
    for (int i = 0; i < childCount; i++) {
          View element = mainL.getChildAt(i);

        // EditText
        if (element instanceof EditText) {
            EditText editText = (EditText)element;
            System.out.println("ELEMENTS EditText getId=>"+editText.getId()+ " getTag=>"+element.getTag()+
            " getText=>"+editText.getText());
        }

        // CheckBox
        if (element instanceof CheckBox) {
            CheckBox checkBox = (CheckBox)element;
            System.out.println("ELEMENTS CheckBox getId=>"+checkBox.getId()+ " getTag=>"+checkBox.getTag()+
            " getText=>"+checkBox.getText()+" isChecked=>"+checkBox.isChecked());
        }

        // DatePicker
        if (element instanceof DatePicker) {
            DatePicker datePicker = (DatePicker)element;
            System.out.println("ELEMENTS DatePicker getId=>"+datePicker.getId()+ " getTag=>"+datePicker.getTag()+
            " getDayOfMonth=>"+datePicker.getDayOfMonth());
        }

        // Spinner
        if (element instanceof Spinner) {
            Spinner spinner = (Spinner)element;
            System.out.println("ELEMENTS Spinner getId=>"+spinner.getId()+ " getTag=>"+spinner.getTag()+
            " getSelectedItemId=>"+spinner.getSelectedItemId()+
            " getSelectedItemPosition=>"+spinner.getSelectedItemPosition()+
            " getTag(key)=>"+spinner.getTag(spinner.getSelectedItemPosition()));
        }

    }

3

Kotlin ile for-in döngüsünü kullanmak daha kolaydır:

for (childView in ll.children) {
     //childView is a child of ll         
}

İşte llolduğu idbir LinearLayoutdüzen XML tanımladı.


1

Tüm görünümleri istediğiniz düzenden alın

public List<View> getAllViews(ViewGroup layout){
        List<View> views = new ArrayList<>();
        for(int i =0; i< layout.getChildCount(); i++){
            views.add(layout.getChildAt(i));
        }
        return views;
}

Tüm TextView öğelerini her tür mizanpajdan alın

public List<TextView> getAllTextViews(ViewGroup layout){
        List<TextView> views = new ArrayList<>();
        for(int i =0; i< layout.getChildCount(); i++){
            View v =layout.getChildAt(i);
            if(v instanceof TextView){
                views.add((TextView)v);
            }
        }
        return views;
}

-1

Kotlin'de bir manzarayı ve çocuklarını tekrar tekrar görün:

private fun View.getAllViews(): List<View> {
    if (this !is ViewGroup || childCount == 0) return listOf(this)

    return children
            .toList()
            .flatMap { it.getAllViews() }
            .plus(this as View)
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.