LayoutInflater attachToRoot parametresi ne anlama geliyor?


203

LayoutInflater.inflateDokümantasyon tam amacı hakkında bana belli değil attachToRootparametresi.

attachToRoot : şişirilmiş hiyerarşinin root parametresine eklenmesi gerekip gerekmediği? False olursa, root yalnızca XML'deki kök görünümü için doğru LayoutParams alt sınıfını oluşturmak için kullanılır.

Birisi, özellikle kök görünümün ne olduğunu daha ayrıntılı olarak açıklayabilir ve belki de trueve falsedeğerler arasındaki davranış değişikliğine bir örnek gösterebilir mi?



Yanıtlar:


159

ŞİMDİ YA DA ŞİMDİ DEĞİL

AttachToRoot'un "üçüncü" parametresinin doğru veya yanlış olması arasındaki temel fark şudur.

AttachToRoot koyduğunuzda

Gerçek: ebeveyn çocuk görünüm eklemek ŞİMDİ SAĞ
yanlış: ebeveyn çocuk görünümü eklemek ŞİMDİ DEĞİL .
Daha sonra ekleyin. '

Ne zaman sonra ?

Daha sonra, örneğin parent.addView(childView)

Yaygın bir yanlış anlama , attachToRoot parametresi yanlışsa, alt görünüm üst öğeye eklenmez. YANLIŞ
Her iki durumda da parentView'a alt görünüm eklenir. Bu sadece meselesidir zaman .

inflater.inflate(child,parent,false);
parent.addView(child);   

eşittir

inflater.inflate(child,parent,true);

BÜYÜK BİR HAYIR-HAYIR
Çocuk görünümünü üst öğeye eklemekten sorumlu değilseniz asla attachToRoot'u doğru olarak iletmemelisiniz.
Örneğin Parça eklerken

public View onCreateView(LayoutInflater inflater,ViewGroup parent,Bundle bundle)
  {
        super.onCreateView(inflater,parent,bundle);
        View view = inflater.inflate(R.layout.image_fragment,parent,false);
        .....
        return view;
  }

üçüncü parametreyi true olarak iletirseniz, bu adam nedeniyle IllegalStateException'ı alırsınız.

getSupportFragmentManager()
      .beginTransaction()
      .add(parent, childFragment)
      .commit();

Alt parçayı yanlışlıkla onCreateView () öğesine eklediğiniz için. Add öğesini çağırmak, alt görünümün zaten üst öğeye eklendiğini bildirir . Bu nedenle IllegalStateException .
Burada childView eklemekten sorumlu değilsiniz, FragmentManager sorumludur. Bu durumda daima yanlış iletin.

NOT: Ayrıca attachToRoot yanlış ise parentView childView touchEvents alamayacak okudum. Ama yine de test etmedim.


6
Çok yararlı, özellikle ilgili bölüm FragmentManager, teşekkür ederim!
CybeX

94

True olarak ayarlanırsa, düzeniniz şişirildiğinde, otomatik olarak 2. parametrede alt görünüm olarak belirtilen ViewGroup görünüm hiyerarşisine eklenir. Örneğin, root parametresi bir LinearLayoutdeğerse, şişirilmiş görünümünüz otomatik olarak bu görünümün alt öğesi olarak eklenir.

False değerine ayarlanırsa, düzeniniz şişirilir ancak başka bir düzene eklenmez (bu nedenle çizilmez, dokunma etkinlikleri vb. Alın).


17
Kafam karıştı. Bir ben okuyana kadar "Belirtilen çocuk Zaten bir üst hatası var” başlamıştı bu cevabı benim kullanmaya yöneliktir, falseiçin attachToRootbenim Fragment en sırasında onCreateView. Bu sorunu ve henüz veridiliminin düzeni Cevabınızı rağmen, görünür ve aktif çözdük. Ne oluyor burada?
Jeff Axelrod

67
Çünkü bir Parça onCreateView öğesinden döndürülen düzeni otomatik olarak ekler. Dolayısıyla, onCreateView'e manuel olarak eklerseniz, görünümünüz 2 ebeveyne eklenir (bahsettiğiniz hatayı üretir).
Joseph Earl

11
Burada biraz kafam karıştı, @JosephEarl, eğer ayarlandıysa true, görünümün 2. parametreye bağlı olduğunu containersöylediniz, ama sonra parçanın otomatik olarak eklendiğini söylüyorsunuz onCreateView(), bu yüzden anlayışım için üçüncü parametre işe yaramaz ve ayarlanmalıdır falseher zaman?
unmultimedio

5
Görünümü görüntüleme sırasında döndürürsünüz, bu daha sonra otomatik olarak eklenir. Attach true olarak ayarlarsanız, bir hata atılır. Ancak, görünümü bağımsız bir durumda şişirdiğinizde, true olarak ayarlayarak görünümü kapsayıcısına otomatik olarak eklemeyi seçebilirsiniz. Görünümü kendim eklediğim için neredeyse hiç doğru değildim.
frostymarvelous

7
@ unmultimedio sadece döndürülen kök görünüm için işe yaramaz onCreateView. Bu kök görünümüne başka düzenler şişirirseniz veya farklı bir bağlamda (örneğin bir Etkinlikte) şişiriyorsanız faydalıdır.
Joseph Earl

36

Yanıtlarda çok fazla metin gibi görünüyor, ancak kod yok, bu yüzden bu eski soruyu bir kod örneği ile canlandırmaya karar verdim, insanların bahsettiği birkaç yanıtta:

True olarak ayarlanırsa, düzeniniz şişirildiğinde, otomatik olarak 2. parametrede alt görünüm olarak belirtilen ViewGroup görünüm hiyerarşisine eklenir.

Kodda aslında ne anlama gelir (çoğu programcının anladığı şey):

public class MyCustomLayout extends LinearLayout {
    public MyCustomLayout(Context context) {
        super(context);
        // Inflate the view from the layout resource and pass it as child of mine (Notice I'm a LinearLayout class).

        LayoutInflater.from(context).inflate(R.layout.child_view, this, true);
    }
}

Önceki kod düzeni ekleyerek olduğu Bildirimi R.layout.child_viewçocuğu olarak MyCustomLayoutçünkü attachToRootparam olduğunu trueve atar tamamen aynı şekilde ebeveynin düzeni params kullanıyorum olacak gibi addViewya da ben xml bunu sanki programlı:

<LinearLayout>
   <View.../>
   ...
</LinearLayout>

Geçerken Aşağıdaki kod senaryosu açıklıyor attachRootolarak false:

LinearLayout linearLayout = new LinearLayout(context);
linearLayout.setLayoutParams(new LayoutParams(
    LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
linearLayout.setOrientation(LinearLayout.VERTICAL);
    // Create a stand-alone view
View myView = LayoutInflater.from(context)
    .inflate(R.layout.ownRootView, null, false);
linearLayout.addView(myView);

Önceki kodda, myViewkendi kök nesnesi olmasını istediğinizi ve bunu herhangi bir ebeveyne eklemediğinizi belirttiniz, daha sonra onu bir parçası olarak ekledik, LinearLayoutancak bir an için tek başına (ebeveynsiz) bir görünümdü.

Aynı şey Parçalar için de geçerlidir, bunları zaten mevcut bir gruba ekleyebilir ve grubun bir parçası olabilir veya sadece parametreleri iletebilirsiniz:

inflater.inflate (R.layout.fragment, null, false);

Bunun kendi kökü olacağını belirtmek için.


1
Sonuçta, bu en yararlı oldu.
Wahib Ul Haq

26

Belgeler ve önceki iki cevap yeterli olmalı, sadece benden bazı düşünceler.

inflateYöntem düzeni dosyaları şişirmek için kullanılır. Bu şişirilmiş düzenlerle, bunları doğrudan bir üst ViewGroupöğeye ekleme veya yalnızca düzen hiyerarşisini bu düzen dosyasından şişirme ve normal görünüm hiyerarşisinin dışında onunla çalışmanız gerekir.

İlk durumda attachToRootparametrenin ayarlanması gerekir true(veya inflatebir düzen dosyasını ve bir üst kökü ViewGroup(non null) alan yöntemi çok basit bir şekilde kullanın ). Bu durumda, Viewdöndürülen ViewGroupyöntem yöntemde iletilen,ViewGroup şişirilmiş görünüm hiyerarşisinin ekleneceği değerdir.

İkinci seçenek için döndürülen düzen mizanpaj dosyasının Viewkök dizinidir ViewGroup. include-mergeÇift sorusuyla ilgili son tartışmamızı hatırlarsanız, bu mergesınırlamanın nedenlerinden biridir ( mergeroot olarak düzenlenmiş bir düzen dosyası şişirilmişse, bir üst öğe sağlamalısınız ve attachedToRootolarak ayarlanmalıdır true). Kök mergeetiketi olan bir düzen dosyanız varsa ve attachedToRootolarak ayarlandıysa false, inflateyöntemin mergeeşdeğeri olmadığı için yöntemin döndüreceği hiçbir şey olmaz. Ayrıca, dokümantasyonda belirtildiği gibi, görünüm hiyerarşisini doğru şekilde oluşturabileceğiniz için set inflateile sürümattachToRootfalseLayoutParams üst öğeden . Bu, bazı durumlarda AdapterView, bir alt sınıfın çocukları ile en dikkate değer ViewGroupolanaddView() yöntemler kümesi desteklenmiyor. getView()Yöntemde bu satırı kullanarak hatırlıyorum eminim :

convertView = inflater.inflate(R.layout.row_layout, parent, false);

Şişirilmiş Bu çizgi olmasını sağlar R.layout.row_layoutdosyası doğru sahiptir LayoutParamsdan AdapterViewonun kökü üzerinde alt sınıf seti ViewGroup. Bunu yapmazsanız, kök bir düzen ise düzen dosyası ile ilgili bazı sorunlar olabilir RelativeLayout. TableLayout/TableRowAyrıca bazı özel ve önemli olması LayoutParamsve emin onları görünümleri doğru olması yapmalıdır LayoutParams.


18

Kendimi de gerçek amacı neydi hakkında karıştı attachToRootyılında inflateyöntemle. Biraz UI çalışmasından sonra nihayet cevap aldım:

ebeveyn:

bu durumda findViewById () kullanarak şişirmek istediğiniz görünüm nesnelerini çevreleyen widget / düzendir.

attachToRoot:

görünümleri üst öğelerine ekler (üst hiyerarşiye ekler), böylece görünümlerin aldığı tüm dokunma olayları da üst görünüme aktarılır. Şimdi bu olayları eğlendirmek ya da görmezden gelmek ebeveynlere kalmış. false olarak ayarlanırsa, ebeveynin doğrudan alt öğesi olarak eklenmezler ve ebeveyn görünümlerden herhangi bir dokunma olayı almaz.

Umarım bu karışıklığı giderir


Cevabınız burada zaten verilmiştir: stackoverflow.com/questions/22326314/…
Neon Warge

12

Bu cevabı yazdım çünkü birkaç StackOverflow sayfasına geçtikten sonra bile attachToRoot'un ne anlama geldiğini net bir şekilde kavrayamadım. LayoutInflater sınıfındaki inflate () yöntemi aşağıdadır.

View inflate (int resource, ViewGroup root, boolean attachToRoot)

Activity_main.xml dosyasına, button.xml düzenine ve oluşturduğum MainActivity.java dosyasına bir göz atın .

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

</LinearLayout>

button.xml

<Button xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    LayoutInflater inflater = getLayoutInflater();
    LinearLayout root = (LinearLayout) findViewById(R.id.root);
    View view = inflater.inflate(R.layout.button, root, false);
}

Kodu çalıştırdığımızda, düzende düğmeyi görmeyiz. Bu, attachToRoot öğesi false olarak ayarlandığından düğme düzenimizin ana etkinlik düzenine eklenmemesidir.

LinearLayout'ta bir Görünümleri LinearLayout'a eklemek için kullanılabilen addView (Görünüm görünümü) yöntemine sahiptir. Bu, düğme düzenini ana etkinlik düzenine ekler ve kodu çalıştırdığınızda düğmeyi görünür hale getirir.

root.addView(view);

Önceki satırı kaldıralım ve attachToRoot'u true olarak ayarladığımızda ne olacağını görelim.

View view = inflater.inflate(R.layout.button, root, true);

Yine düğme düzeninin görünür olduğunu görüyoruz. Bu, attachToRoot'un şişirilmiş düzeni doğrudan belirtilen üst öğeye iliştirmesidir. Bu durumda kök LinearLayout. Burada, addView (View view) yöntemiyle önceki durumda yaptığımız gibi görünümleri manuel olarak eklemek zorunda değiliz.

Kişiler, AttaToRoot'u bir Parça için true olarak ayarlarken neden IllegalStateException özel durumunu alıyorlar.

Bunun nedeni, bir fragman için, fragman düzeninizi etkinlik dosyanıza nereye yerleştireceğinizi belirtmiş olmanızdır.

FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
    .add(R.id.root, fragment)
    .commit();

Eklenti (int veli, Fragment fragmanı) ebeveyn düzeni 's düzene sahip parçasını ekler. AttachToRoot öğesini true olarak ayarlarsak, IllegalStateException özelliğini alırsınız: Belirtilen alt öğenin zaten bir üst öğesi var. Parça düzeni, add () yöntemindeki üst düzene zaten eklenmiş olduğundan.

Fragment'ları şişirirken attachToRoot için her zaman false iletmelisiniz. Parça eklemek, kaldırmak ve değiştirmek FragmentManager'ın görevidir.

Örneğime geri dön. Ya ikisini de yaparsak.

View view = inflater.inflate(R.layout.button, root, true);
root.addView(view);

İlk satırda, LayoutInflater düğme düzenini kök düzenine ekler ve aynı düğme düzenini tutan bir View nesnesi döndürür. İkinci satırda, aynı Görünüm nesnesini üst kök düzenine ekliyoruz. Bu, Parçalar ile gördüğümüz aynı IllegalStateException ile sonuçlanır (Belirtilen çocuğun zaten bir üst öğesi var).

AttachToRoot'u varsayılan olarak true olarak ayarlayan başka bir aşırı yüklenmiş inflate () yöntemi olduğunu unutmayın.

View inflate (int resource, ViewGroup root)

Basit ve net bir açıklama, sadece aradığım şey!
uçanAssistant

10

İnflate () yönteminin dokümantasyonu nedeniyle bu konuda çok fazla kafa karışıklığı var.

Genel olarak, attachToRoot öğesi true olarak ayarlanırsa, ilk parametrede belirtilen düzen dosyası şişirilir ve o anda o anda ikinci parametrede belirtilen ViewGroup'a eklenir. AttachToRoot false olduğunda, ilk parametreden mizanpaj dosyası şişirilir ve Görünüm olarak döndürülür ve herhangi bir Görünüm eki başka bir zamanda gerçekleşir.

Çok fazla örnek görmedikçe bu muhtemelen bir şey ifade etmiyor. Bir Parçanın onCreateView yönteminin içinde LayoutInflater.inflate () öğesini çağırırken, bu Parçayla ilişkili Etkinlik aslında o Parçanın görünümünün eklenmesinden sorumlu olduğu için attachToRoot için false olarak iletmek isteyeceksiniz. Manüel olarak şişiriyor ve addView () yönteminde olduğu gibi daha sonraki bir zamanda başka bir Görünüme Görünüm ekliyorsanız, ek daha sonraki bir noktada geldiğinden attachToRoot için false değerini iletmek istersiniz.

Bu konu hakkında yazdığım bir blog gönderisinde Diyaloglar ve özel Görünümler ile ilgili diğer benzersiz örnekleri okuyabilirsiniz.

https://www.bignerdranch.com/blog/understanding-androids-layoutinflater-inflate/


4

attachToRoot true değerine ayarlamak inflatedView , üst görünümün hiyerarşisine eklenecek . Böylece, kullanıcılar tarafından "görülebilir" ve dokunma olaylarını (veya diğer kullanıcı arayüzü işlemlerini) algılayabilir. Aksi takdirde, yalnızca oluşturulur, herhangi bir görünüm hiyerarşisine eklenmez ve dolayısıyla dokunma olaylarını göremez veya işleyemez.

Android için yeni olan iOS geliştiricileri attachToRootiçin true olarak ayarlandığında, bu yöntemi çağırdığınız anlamına gelir:

[parent addSubview:inflatedView];

İleriye gitmeden Eğer sorabilir: Ben ayarlarsanız neden ebeveyn görünümü geçmelidir attachToRootiçin false? Bunun nedeni, XML ağacınızdaki kök öğenin bazı LayoutParams'ı (eşleştirme üst öğesi gibi) hesaplamak için üst görünüme ihtiyacı olmasıdır.


0

Üst öğeyi tanımladığınızda attachToRoot, şişiricinin üst öğeye gerçekten eklemesini isteyip istemediğinizi belirler. Bazı durumlarda bu sorun yaratır, ListAdapter gibi bir istisna neden olur, çünkü liste listeye görünüm eklemeye çalışır, ancak zaten eklenmiş olduğunu söyler. Bir Etkinliğe eklemek için görünümü kendiniz şişirdiğiniz diğer kasada kullanışlı olabilir ve size bir kod satırı kaydedebilir.


1
iyi bir cevap vermesi gereken net bir resim vermez.
Prakhar1001

0

Mesela ImageViewa, a LinearLayoutve a var RelativeLayout. LinearLayout, RelativeLayout'un alt öğesidir. Görünüm Hiyerarşisi olacaktır.

RelativeLayout
           ------->LinearLayout

ImageView için ayrı bir yerleşim dosyamız var

image_view_layout.xml

Köke ekle:

//here container is the LinearLayout

    View v = Inflater.Inflate(R.layout.image_view_layout,container,true);
  1. Burada v, konteyner düzeninin referansını içerir, yani LinearLayout.and setImageResource(R.drawable.np);ve ImageView gibi parametreleri ayarlamak istiyorsanız , üst referansı ile bulmanız gerekecektir.view.findById()
  2. V öğesinin üst öğesi FrameLayout olacaktır.
  3. LayoutParams, FrameLayout öğesinden olacaktır.

Kök eklemeyin:

//here container is the LinearLayout
    View v = Inflater.Inflate(R.layout.image_view_layout,container,false);
  1. Burada v referans kapsayıcı düzeni içermez, ancak şişirilmiş olan ImageView'e doğrudan referans içerir, böylece parametrelerini aşağıdaki gibi view.setImageResource(R.drawable.np);hakem olmadan ayarlayabilirsinizfindViewById . Ancak kap, ImageView'in kabın LayoutParams'sını alması için belirtilmiştir, böylece kapsayıcı referansının yalnızca LayoutParams için başka bir şey olmadığını söyleyebilirsiniz.
  2. bu nedenle özellikle Ebeveyn geçersiz olacaktır.
  3. LayoutParams LinearLayout olacaktır.

0

attachToRoot Doğru olarak ayarla:

AttachToRoot true olarak ayarlanırsa, ilk parametrede belirtilen düzen dosyası şişirilir ve ikinci parametrede belirtilen ViewGroup'a eklenir.

XML mizanpaj dosyasında mizanpaj genişliği ve mizanpaj yüksekliği match_parent olarak ayarlanmış bir düğme belirttiğimizi düşünün.

<Button xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/custom_button">
</Button>

Şimdi bu Düğmeyi bir Parçanın veya Etkinliğin içindeki bir LinearLayout'a programlı olarak eklemek istiyoruz. LinearLayout'umuz zaten bir üye değişkeni olan mLinearLayout ise, düğmeyi aşağıdakilerle ekleyebiliriz:

inflater.inflate(R.layout.custom_button, mLinearLayout, true);

Düğmeyi düzen kaynak dosyasından şişirmek istediğimizi belirledik; daha sonra LayoutInflater'a bunu mLinearLayout'a eklemek istediğimizi söyleriz. Düzen parametrelerimiz onurlandırılır çünkü Button'ın bir LinearLayout'a eklendiğini biliyoruz. Button öğesinin yerleşim parametre türü LinearLayout.LayoutParams olmalıdır.

attachToRoot False olarak ayarla (false kullanmak gerekmez)

AttachToRoot false olarak ayarlanırsa, o zaman ilk parametrede belirtilen düzen dosyası şişirilir ve değil ViewGroup ikinci parametrede belirtilen ancak şişirilmiş bağlı görünüm ebeveynin LayoutParams kazanır ebeveyn doğru sığdırmak için bu görünümü sağlar.


AttachToRoot'u ne zaman false olarak ayarlamak istediğinize bir göz atalım. Bu senaryoda, inflate () parametresinin ilk parametresinde belirtilen Görünüm, bu noktada ikinci parametrede ViewGroup'a eklenmez.

Bir düzen dosyasından mLinearLayout'a özel bir Düğme eklemek istediğimiz Button örneğimizi daha önce hatırlayın. Button'mızı yine attachToRoot için false olarak ileterek mLinearLayout'a ekleyebiliriz - sonradan kendimiz ekleriz.

Button button = (Button) inflater.inflate(R.layout.custom_button,    mLinearLayout, false);
mLinearLayout.addView(button);

Bu iki kod satırı, attachToRoot için true değerini ilettiğimizde daha önce bir kod satırında yazdıklarımızla eşdeğerdir. Yanlış olarak geçerek, Görünümümüzü henüz kök ViewGroup'a eklemek istemediğimizi söylüyoruz. Bunun zamanın başka bir noktasında olacağını söylüyoruz. Bu örnekte, zaman içindeki diğer nokta, enflasyonun hemen altında kullanılan addView () yöntemidir.

Görünüm'ü el ile bir ViewGroup'a eklediğimizde, sahte attachToRoot örneği biraz daha fazla çalışma gerektirir.

attachToRoot false olarak ayarlanır (false

gerekir) onCreateView () öğesinde bir Parçanın Görünümünü şişirirken ve döndürürken, attachToRoot için false değerini ilettiğinizden emin olun. Doğru iletirseniz, belirtilen alt öğenin zaten bir üst öğesi olduğundan bir IllegalStateException özel durumu alırsınız. Parçanızın görünümünün Faaliyetinize nereye yerleştirileceğini belirtmelisiniz. Parça eklemek, kaldırmak ve değiştirmek FragmentManager'ın görevidir.

FragmentManager fragmentManager = getSupportFragmentManager();
Fragment fragment =  fragmentManager.findFragmentById(R.id.root_viewGroup);

if (fragment == null) {
fragment = new MainFragment();
fragmentManager.beginTransaction()
    .add(R.id.root_viewGroup, fragment)
    .commit();
}

Parçanızı Faaliyetinizde tutacak root_viewGroup kapsayıcısı, Parçanızdaki onCreateView () öğesinde size verilen ViewGroup parametresidir. Ayrıca LayoutInflater.inflate () öğesine ilettiğiniz ViewGroup. Ancak FragmentManager, Parça Görünümünüzü bu Görünüm Grubuna eklemeyi ele alacaktır. İki kez takmak istemezsiniz. AttachToRoot öğesini false olarak ayarlayın.

public View onCreateView(LayoutInflater inflater, ViewGroup  parentViewGroup, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_layout,     parentViewGroup, false);

return view;
}

OnCreateView () 'a eklemek istemiyorsak neden Fragment'ımızın üst ViewGroup'unu ilk etapta veriyoruz? İnflate () yöntemi neden bir kök ViewGroup istiyor?

Yeni şişirilmiş Görünümümüzü ana Görüntüleme Grubuna hemen eklemesek bile, yeni Görünümün sonunda eklendiğinde boyutunu ve konumunu belirlemesi için yine de ebeveynin LayoutParams'ı kullanmamız gerektiği ortaya çıkıyor.

Bağlantı: https://youtu.be/1Y0LlmTCOkM?t=409


0

Sadece bu konuda çalışırken karşılaştığım bazı noktaları paylaşıyorum,

Kabul edilen cevaba ek olarak, bazı yardımcı olabilecek bazı noktalar istiyorum.

Bu nedenle, attachToRoot'u true olarak kullandığımda , döndürülen görünüm, görüntülenen mizanpajı değil , insertToRoot'taki şişirme (layoutResource, ViewGroup, attachToRoot) yöntemi için parametre olarak geçirilen ViewGroup yani ebeveynin kök ViewGroup türündeydi. false olarak, bu layoutResource'un kök ViewGroup işlevinin dönüş türünü alırız .

Bir örnekle açıklayayım:

Kök mizanpajı olarak bir LinearLayout'umuz varsa ve sonra şişirme işlevi aracılığıyla TextView eklemek istiyoruz .

Daha sonra kullanımıyla ilgili attachToRoot olarak gerçek şişirmek fonksiyonu bir döndüren Görünüm tipi LinearLayout

kullanırken halindeyken attachToRoot olarak yanlış şişirmek fonksiyonu bir döndüren Görünüm tipi TextView

Umarım bu bulgu biraz yardımcı olur ...

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.