Nasıl görmek programlı bir KİMLİK atayabilir miyim?
Görünüm bir program aracılığıyla oluştururken XML dosyası, android:id="@ id/something"
gibi bir görünüm için bir KİMLİK atama ve findViewById()
, Ara verebiliriz ama, bir KİMLİK numarasına nasıl atarım?
setId()
varsayılan olarak aynı görev değil bence. setId()
ekstra.
Biri beni düzeltebilir mi?
CEVAP
id
Android genel bakış
id
bir tamsayı yaygın görüş tanımlamak için kullanılır; id
Bu XML üzerinden atanabilir bir Android (uygun olduğunda) ve üzerinden kod (Program aracılığıyla.) id
XML tanımlı View
Inflater
(setContentView
. kullanma gibi) tarafından oluşturulan başvuruları almak için kullanışlıdır
XML
) ata id
- Sizin görünüm için
"
kanala girişi yasaklanacaktırandroid:id="@ id/
bir öznitelik ekleyin. - Uygulamanız oluşturulduğunda,
android:id
atanacaktırbenzersizKodu kullanmak içinint
. - Referans
android:id
'kodunu kullanarakint
değer s "R.id.
kanala girişi yasaklanacaktır" (etkili bir sabit.) int
bu yapı inşa etmek için değiştirebilirsinizbu yüzdenhiç kopya kimliğigen/
paketten./R.java
sadece adı "R.id.
kanala girişi yasaklanacaktır".- (Ayrıca,
id
XMLPreference
atananPreference
View
. kendi üretir) ne zaman kullanılmaz
id
) kod (programlı) atayın
- El ile ayarlama
id
someView.setId(
int);
kullanarak int
pozitif olmalı, ama başka ne istersen olabilir keyfi - (eğer bu korkunç ise okumaya devam edin.)- Eğer birkaç kez öğeleri temsil eden oluşturuyorsanız numaralandırma örneğin, madde numarasını kullanabilirsiniz.
id
s teklik
XML
atananid
s benzersiz olacak.- Kod atanmış
id
sdeğilbenzersiz olmak zorunda - Kod atanmış
id
s (teorik olarak)XML
atananid
s ile çakışabilir. id
bu çelişkili eğer doğru sorgulanan önemi yok(okumaya devam edin).
(Ve neden) id
çakışan sorun yok
findViewById(int)
derinlik-ilk görünüm hiyerarşisi aracılığıyla ardışık yinelemeGörünümü belirtinve ilk eşleşen bulurView
id
dönüş.- Sürece hiçbir kod atanmış
id
s atanmış önce bir XML tanımlıid
hiyerarşifindViewById(R.id.somename)
için XML tanımlı Görüntülemeid
'd.
Dinamik Görünümler Yaratmak ve ID
Atama
- Düzen XML,
id
55 *boş bir tanımlama. android:id="@ id/placeholder"
57 *gibi.- Kod tutucu
View
59 *s doldurmak için kullanın. - Eğer ihtiyacınız varsa ya da ister, her görünüm için elverişli olan
id
herhangi bir s atayın. Bu çocuk görüşleri yer tutucu kullanarak sorgu.findViewByİd(convenientİnt);
API 17 benzersiz bir KİMLİK oluşturmak için olanak sağlayan
View.generateViewId()
tanıttı.
Görüşleriniz için başvurular etrafında tutmak için seçersenizemin getApplicationContext()
ile onları oluşturmak ve emin her başvuru onDestroy
null olarak ayarlayın. Görünüşe göresızıntıActivity
(mahvolduktan sonra üzerine asılı) savurgan.. :)
Kodu kullanmak için 66 ** bir XML saklıdır
17 API tanıttıView.generateViewId()
benzersiz bir KİMLİK oluşturur.(- Şansını-yapmak-değişiklikleri kabul bu işaret için teşekkürler.)*
ViewGroup
olamaz XML (ya da olmak istemiyorsun) tanımlanan XML üzerinden kimliği benzersiz kalmasını sağlamak için ayırabilirsiniz:
Buradavalues/ids.xmltanımlar özel id
:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="reservedNamedId" type="id"/>
</resources>
Sonra ViewGroup veya Görünüm oluşturulduktan sonra, özel kimliği ekleyebilirsiniz
myViewGroup.setId(R.id.reservedNamedId);
id
örnek çelişkili
Örnek kafamı allak bullak yoluyla açıklık getirmek için, sahne arkasında id
bir çatışma olduğunda ne olacağını incelemek sağlar.
layout/mylayout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@ id/placeholder"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
</LinearLayout>
Bir çatışma simülasyonu, diyelim ki bizim son inşa atanan R.id.placeholder
(@ id/placeholder
) int
bir değer12
..
Sonraki,MyActivity.javatanımlar ekler görüşlerini bazı program aracılığıyla (kod):
int placeholderId = R.id.placeholder; // placeholderId==12
// returns *placeholder* which has id==12:
ViewGroup placeholder = (ViewGroup)this.findViewById(placeholderId);
for (int i=0; i<20; i ){
TextView tv = new TextView(this.getApplicationContext());
// One new TextView will also be assigned an id==12:
tv.setId(i);
placeholder.addView(tv);
}
Yani placeholder
ve yeni bir TextView
s 12 id
hem! Ama bu eğer tutucu çocuğu manzarası sorgu Eğer gerçekten bir sorun değil:
// Will return a generated TextView:
placeholder.findViewById(12);
// Whereas this will return the ViewGroup *placeholder*;
// as long as its R.id remains 12:
Activity.this.findViewById(12);
*O kadar da kötü değil
Android: Görünüm.KİMLİK çatışmaları ön...
Nasıl JSON programlı güzelleştirmek mi...
Nasıl iOS 7 varsayılan mavi renk progr...
Nasıl sınıfından film şeridi programlı...
Nasıl dosya konumunu programlı olarak ...