2014-07-12 25 views
27

Android Studio Beta (0.8), bazı int parametrelerinin rasgele tamsayılar olmadığını, ancak bazı özelliklerin olduğunu kontrol ettiği şık yeni bir özelliğe sahiptir. Böyle bir şey çağıran ÖrneğinAndroid Studio'nun "beklenen kaynak türü" kontrolleri?

:

setContentView(R.id.textView1); 

doğru R.id.textView1 bir düzen kimliği olmadığını bildirir (mesaj "tipi düzeni beklenen kaynak" dır). Bunun etrafında biberlenmiş başka durumlar var.

Bu koruma, kendi yöntemlerinizi karışıma eklediğiniz anda kaybolur, örn.

private void mySetContentView(int resourceId) { 
    setContentView(resourceId); 
} 

Sonra rasgele tamsayı ile mySetContentView() çağırabilir ve onu şikayet olmaz.

Yani, iki (ilgili) olan sorular:

bu nasıl başarıldığı
  1. - tiftik içine "pişmiş" özel kontroller nelerdir?
  2. mySetContentView() yöntemine, geçersiz bir değerle çağıran bir kaynak türü hatası bildirecek şekilde ek açıklama ekleme yolu var mı?
+4

Ben bir ek açıklama var eminim - Onların geliştirici araçları sunumda bu örtülü olabileceğini düşünüyorum Google I | O. – CommonsWare

+1

@CommonsWare Haklısınız! Buna cevap vermek mi yoksa kendim mi yapmalıyım? – matiash

+1

Açıklamayı hatırlamadığımdan, daha iyi cevap verdiniz. :-) – CommonsWare

cevap

34

(Uyarın için teşekkürler @CommonsWare kadar).

Bu denetimleri kendi kodunuzda desteklemek için Java ek açıklamaları vardır. Hepsi android.support.annotations paketinde bulunabilir:

  • IdRes
  • DrawableRes
  • LayoutRes
  • Bu durumda
  • StringRes
  • & c

, örneğin, ben kullanabilirsiniz :

ve Android Studio, sağlanan kaynak kimliğinin gerçekten bir düzen için olup olmadığını kontrol edecektir. Ayrıca, bu ek açıklamalar dışa aktarılır, bu nedenle bir kütüphane tasarlanırken özellikle yararlı olabilirler.

Kaynaklar:

+0

Teşekkürler! Aynı exeption ... InputStream is = getResources(). OpenRawResource (getResourceID (R.drawable.greenbal)); .... private int getResourceID (@DrawableRes int resID) { geri dönüş; } – oshliaer

20

Bu, tüm Ek Açıklamalar şunlardır:

@AnimatorRes 
@AnimRes 
@AnyRes 
@ArrayRes 
@AttrRes 
@BoolRes 
@ColorRes 
@DimenRes 
@DrawableRes 
@FractionRes 
@IdRes 
@IntDef 
@IntegerRes 
@InterpolatorRes 
@LayoutRes 
@MenuRes 
@NonNull 
@Nullable 
@PluralsRes 
@RawRes 
@StringDef 
@StringRes 
@StyleableRes 
@StyleRes 
@XmlRes 
0

tüm açıklamalar sen android.support.annotation yapabilirsiniz ile kullanabileceğiniz here'u bulun.Destek ek açıklamaları hakkında

Ve technical doc.

8

bu cevabı deneyin: Its çalışma ... senin build.gradle bu kodu koyun

android { 
lintOptions { 
    disable "ResourceType" 
    } 
} 
+0

Bir çekicilik gibi çalışır) –

+1

Sorunun tam tersi olduğunu düşünüyorum: Ara işlevler kullanılsa bile bu denetimlere sahip olmak istiyor. Dikkat: Çeklerin devre dışı bırakılması genellikle kötü bir fikirdir. Android geliştiricileri genellikle bizden daha akıllı;) –