android res - Fare riferimento a una stringa in una risorsa array di stringhe con xml




resources language (5)

Purtroppo:

  • Sembra che non puoi fare riferimento a un singolo elemento da un array in valori / arrays.xml con XML. Certo che puoi farlo in Java, ma non in XML. Non ci sono informazioni su come farlo nel riferimento agli sviluppatori Android, e non ho trovato nessun altro.

  • Sembra che tu non possa usare un array come chiave nel layout delle preferenze. Ogni chiave deve essere un singolo valore con il proprio nome di chiave.

Cosa voglio realizzare: voglio essere in grado di scorrere le 17 preferenze, controllare se l'elemento è selezionato e, se lo è, caricare la stringa dall'array di stringhe per quel nome di preferenza.

Ecco il codice che speravo avrebbe completato questo compito:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());  
ArrayAdapter<String> itemsArrayList = new ArrayAdapter<String>(getBaseContext(),   android.R.layout.simple_list_item_1);  
String[] itemNames = getResources().getStringArray(R.array.itemNames_array);  


for (int i = 0; i < 16; i++) {  
    if (prefs.getBoolean("itemKey[i]", true)) {  
        itemsArrayList.add(itemNames[i]);  
    }  
} 

Cosa ho fatto:

  • Ho impostato una singola stringa per ciascuno degli elementi e ho fatto riferimento alle singole stringhe nel file. Uso il riferimento a stringa singola per i titoli della casella di controllo del layout delle preferenze e l'array per il mio loop.

  • Per scorrere le preferenze, ho appena chiamato i tasti come key1, key2, key3, ecc. Poiché si fa riferimento a una chiave con una stringa, si ha la possibilità di "creare" il nome della chiave in fase di runtime.

Ecco il nuovo codice:

for (int i = 0; i < 16; i++) {  
        if (prefs.getBoolean("itemKey" + String.valueOf(i), true)) {  
        itemsArrayList.add(itemNames[i]);  
    }  
}

Ho preferenze in cui è possibile abilitare / disabilitare quali elementi verranno visualizzati nel menu. Ci sono 17 articoli Ho creato una serie di stringhe in valori / arrays.xml con titoli per ciascuno di questi 17 elementi.

Ho preferenze.xml che ha il layout per il mio file delle preferenze, e vorrei fare riferimento a un singolo elemento dell'array di stringhe da usare come titolo.

Come posso fare questo?

Nel riferimento agli sviluppatori Android, vedo come posso fare riferimento a una singola stringa con XML, ma non a come posso fare riferimento a una stringa da una risorsa di matrice in XML.


L'opzione migliore sarebbe quella di utilizzare semplicemente l'array restituito come array, ovvero:

getResources().getStringArray(R.array.your_array)[position]

Questo è un approccio di scelta rapida degli approcci sopra menzionati, ma fa il lavoro nella moda che desideri. In caso contrario, Android non fornisce indicizzazione XML diretta per array basati su xml.


Forse questo aiuterebbe:

String[] some_array = getResources().getStringArray(R.array.your_string_array)

Quindi ottieni l'array-list come String [] e poi scegli i i, some_array [i].


Un altro modo per farlo è definire un array di risorse in strings.xml come di seguito.

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE resources [
    <!ENTITY supportDefaultSelection "Choose your issue">
    <!ENTITY issueOption1 "Support">
    <!ENTITY issueOption2 "Feedback">
    <!ENTITY issueOption3 "Help">
    ]>

e quindi definire una matrice di stringhe usando le risorse di cui sopra

<string-array name="support_issues_array">
        <item>&supportDefaultSelection;</item>
        <item>&issueOption1;</item>
        <item>&issueOption2;</item>
        <item>&issueOption3;</item>
    </string-array>

È possibile fare riferimento alla stessa stringa anche in altri xml mantenendo DRY intatto. Il vantaggio che vedo è che con un singolo cambio di valore avrebbe effetto tutti i riferimenti nel codice.


Ad esempio, ho usato in una console di Firefox:

[].forEach.call(document.getElementsByTagName('pre'), function(e){ 
   console.log(e);
})




android xml reference preferences arrays