Voglio essere in grado di scorrere tutti i campi nel file R generato.Android: iterazione programmata tramite ID risorsa
Qualcosa di simile:
for(int id : R.id.getAllFields()){
//Do something with id, like create a view for each image
}
ho provato riflessione, ma io non riesco a caricare una classe interna specifico che è contenuto all'interno della classe R. Così, per esempio, questo potrebbe non funzionare per me:
Class c = Class.forName("packageName.R.id")
posso riflettere sulla classe R in sé, ma ho bisogno di campi all'interno della classe id.
Ho anche provato a cercare nella classe Risorse, ma non ho trovato nulla lì. In quel caso, sembra che tu possa prendere un resourceID e ottenere il nome della stringa di quell'id, o prendere un nome di stringa e ottenere il resourceID corrispondente. Non ho trovato nulla di simile:
int[] Resources.getAllResourceIDs()
Forse sto andando su questo sbagliato. O forse non dovrei combattere tutti digitando a mano, ad es .:
int[] myIds = {R.id.firstResource, R.id.secondResource}
Questo approccio ha lo svantaggio di non essere il più flessibile quando si lavora con la mia UI designer. Ogni volta che aggiunge una nuova risorsa al file XML, dovrò aggiornare il codice. Ovviamente non troppo doloroso, ma sarebbe comunque bello avere e sembra che dovrebbe essere fattibile.
EDIT:
La risposta di sotto di circa ViewGroup.getChildCount()/ViewGroup.getChildAt() funziona bene. Ma dovevo anche trovare un modo per istanziare il mio XML ViewGroup/Layout. Per fare questo, provare qualcosa di simile:
LayoutInflater li = MyActivity.getLayoutInflater();
ViewGroup vg = (ViewGroup) li.inflate(R.layout.main, null);
Non sto dicendo questo per essere snarky, ma secondo me il fatto che ti senti bisogno di fare questa domanda significa probabilmente stai facendo Qualcosa non va. Puoi approfondire il tuo caso d'uso per farlo. Non riesco a pensare a nessun motivo per cui vorrei avere accesso a tutti gli ID definiti durante tutta la mia intera applicazione. – Qberticus
Non voglio accedere a tutti gli ID, ma piuttosto a tutti gli ID delle risorse sotto un certo nome (ad esempio R.imageViewIds). In questo modo, nel mio codice, posso aggiungere un listener di eventi o qualsiasi cosa a ciascuno di essi in un ciclo for.La mia interfaccia utente avrà più di ImageViews che risponderanno agli eventi e sarebbe bello poter accedere a tutte quelle ImageViews senza la codifica manuale per nome (ad esempio IView1.setListener (myListener); IView2.setListener (myListener) Inoltre, non sarà necessario rifattorizzare il mio codice se il progettista dell'interfaccia utente decide di rinominare le cose nel file XML. –