SORU
10 Aralık 2011, CUMARTESİ


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
5 Kasım 2012, PAZARTESİ


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ı ViewInflater (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çin int.
  • Referans android:id'kodunu kullanarak int 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 XML Preference atanan Preference View. kendi üretir) ne zaman kullanılmaz

id) kod (programlı) atayın

  • El ile ayarlama idsomeView.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.

ids teklik

  • XMLatanan ids benzersiz olacak.
  • Kod atanmış idsdeğilbenzersiz olmak zorunda
  • Kod atanmış ids (teorik olarak) XMLatanan ids ile çakışabilir.
  • idbu ç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 bulur View id dönüş.
  • Sürece hiçbir kod atanmış ids atanmış önce bir XML tanımlı id hiyerarşi findViewById(R.id.somename) için XML tanımlı Görüntüleme id'd.

Dinamik Görünümler Yaratmak ve IDAtama

  • 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 idherhangi 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 TextViews 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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Android Authority

    Android Auth

    3 NİSAN 2011
  • Jonathan D.

    Jonathan D.

    3 Kasım 2006
  • Xbox

    Xbox

    1 Kasım 2005