Oluşturulan R dosyasındaki tüm alanlar arasında yineleme yapabilmek istiyorum. gibiAndroid: Program aracılığıyla yineleyin Kaynak kimlikleri
şey:
for(int id : R.id.getAllFields()){
//Do something with id, like create a view for each image
}
Ben yansıma denedim ama R sınıfının içinde bulunan ediyor belirli iç sınıf yüklemek gibi olamaz. Ben R sınıfının kendisini yansıtabilir
Class c = Class.forName("packageName.R.id")
ama id sınıf içindeki alanları gerekir: Yani, örneğin, bu benim için işe yaramaz.
Ayrıca Kaynaklar sınıfına bakmayı denedim, ancak orada hiçbir şey bulamadım. Bu durumda, bir resourceID alabilir ve bu kimliğin dize adını alabilir veya bir dize adı alabilir ve ilgili resourceID'yi alabilirsiniz. Ben şu gibi bir şey bulamadım: Bu yanlış anlıyorum belki de ben bu yanlış gidiyorum. Ya da belki bu yaklaşım benim UI tasarımcı ile çalışırken kadar esnek olmama dezavantajı var .:
int[] myIds = {R.id.firstResource, R.id.secondResource}
elle hepsini yazarak örneğin kavga etmemeli. XML dosyasına yeni bir kaynak eklediğinde, kodu güncellemeliyim. Açıkçası çok acı verici değil, ama yine de sahip olmak güzel olurdu ve yapılabilir olması gerektiği gibi görünüyor.
DÜZENLEME: ViewGroup.getChildCount()/ViewGroup.getChildAt() çalışıyor yaklaşık aşağıda
cevap. Ancak, XML ViewGroup/Layout'umu örneklendirmenin bir yolunu bulmak zorundaydım. Sen bir iç sınıfına yansıma kullanabilirsiniz
LayoutInflater li = MyActivity.getLayoutInflater();
ViewGroup vg = (ViewGroup) li.inflate(R.layout.main, null);
bu snarky olmak için söylemiyorum ama IMHO gerçeği size bu soruyu muhtemelen yapıyoruz demektir sormak gerekir hissediyorum Ters giden birşey mi var. Bunu yapmak için kullanım durumunuz hakkında ayrıntılı bilgi verebilir misiniz? Tüm uygulamam boyunca tanımlanan tüm kimliklere erişmek istediğim için herhangi bir sebep düşünemiyorum. – Qberticus
Tüm kimliklere erişmek istemiyorum, bunun yerine, tüm kaynak kimlikleri belirli bir adın altında (ör., R.imageViewIds). Bu şekilde, kodumda, bir olay dinleyicisi ekleyebilirim ya da her birine bir döngü için ekleyebilirim.UI'mn tümü olaylara yanıt verecek çok sayıda ImageView'a sahip olacak ve bu ImageView'ların her birine adlarına göre kodlama yapmadan erişebilseydim (örn. IView1.setListener (myListener); IView2.setListener (myListener));) Ayrıca, UI tasarımcım XML dosyasındaki şeyleri yeniden adlandırmaya karar verirse kodumu yeniden düzenlemem gerekmeyecek. –