SORU
11 Kasım 2009, ÇARŞAMBA


Android: Görünüm.KİMLİK çatışmaları önlemek için nasıl(int ıd) programlı olarak setİD -?

TextViews Program aracılığıyla bir döngü içinde ekliyorum ve Için bir ekleyebilirsiniz.

Nasıl TextView.setId(int id) kullanabilirim? Ne Tamsayı KİMLİĞİ diğer Kimlikleri ile çatışma değil yani.

CEVAP
15 Mart 2013, Cuma


Google nihayet programlı olarak oluşturulmuş görünümler için benzersiz Kimlikler üretme ihtiyacı fark etti

17 seviye ve üstü API ' diyebilirsin

View.generateViewId()

O zaman kullanın. View.setId(int).

Durumda hedef seviyesi daha düşük 17, burada doğrudan projenizde kullanmak, açıklama sınıfınıza koyabilirsiniz View.java iç uygulama ya da bir yere için ihtiyacınız:

private static final AtomicInteger sNextGeneratedId = new AtomicInteger(1);

/**
 * Generate a value suitable for use in {@link #setId(int)}.
 * This value will not collide with ID values generated at build time by aapt for R.id.
 *
 * @return a generated ID value
 */
public static int generateViewId() {
    for (;;) {
        final int result = sNextGeneratedId.get();
        // aapt-generated IDs have the high byte nonzero; clamp to the range under that.
        int newValue = result   1;
        if (newValue > 0x00FFFFFF) newValue = 1; // Roll over to 1, not 0.
        if (sNextGeneratedId.compareAndSet(result, newValue)) {
            return result;
        }
    }
}

KİMLİK numarası 0x00FFFFFF daha büyük statik görüntüleme /res tanımlanan xml dosyalarını ayrılmıştır. (Büyük ihtimalle benim projelerde r.java gelen 0x7f****** .)

Kodunuzda yapabilirsiniz:

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {

        myView.setId(Utils.generateViewId());

    } else {

        myView.setId(View.generateViewId());

    }

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Easy Learn Tutorial

    Easy Learn T

    10 Kasım 2012
  • Goran Dimov

    Goran Dimov

    1 HAZİRAN 2014
  • Chaîne de TheMoustic

    Chaîne de T

    5 Kasım 2006