2010-11-05 7 views
0

Je viens de commencer avec Android et écrire une application de dialogue simple avec des chaînes aléatoires présentés à l'utilisateur. J'ai commencé à réfléchir à la meilleure façon de le faire?Choisissez des chaînes aléatoires de string.xml

si strings.xml se composent de chaînes comme:

<string name="quote1">blaha blaha</string> 
<string name="quote2">chit chat</string> 

Je suppose qu'il ya une meilleure façon puis générer un int et aléatoire puis faire

case 1: 
    R.id.quote1 

Je suppose que finira avec au moins 50 citations différentes dans ce fichier, c'est un commutateur laide ..

Sincères salutations

Répondre

0

Chargez vos guillemets dans une structure de liste via xpath, sélectionnez un index aléatoire dans la liste. Afficher cette citation

Alternativement, obtenez le nombre de citations du document xml, obtenez un index aléatoire dans cette plage, sélectionnez le noeud xml à cet index et affichez-le.

0

Si vous avez seulement deux cordes c'est assez simple, à droite. Mais si vous en avez plus, vous voudrez peut-être penser à faire un tableau de chaînes. Vous pouvez faire en XML facilement.

Ensuite, choisissez simplement stringarray [random_number] comme chaîne.

3

Essayez d'obtenir vos citations dans un String array

+1

Vous pouvez expliquer un peu plus loin pour explicitation: Ensuite, vous pouvez charger tout le tableau dans votre activité avec la méthode des ressources getStringArray (http://developer.android.com/reference/android/content/res /Resources.html#getStringArray (int)) et sélectionnez aléatoirement dans le tableau sans avoir besoin de coder explicitement un commutateur pour chaque ID de ressource. C'est presque certainement le moyen le plus facile d'aller. –

+0

Ça sonne bien, je vais essayer ça à coup sûr! – elwis

-1

Il y a un moyen de sélectionner un élément aléatoire dans une liste séquentielle sans connaître la longueur de la liste.

L'algorithme est:

numItems = 0; 
selectedItem = null; 
while not end of list 
{ 
    item = read item from list 
    numItems = numItems+1; 
    if (numItems == 1) 
    selectedItem = item; 
    else if (random(numItems) == 0) 
    selectedItem = item 
} 

L'idée est qu'il ya toujours une probabilité 1/numItems que le nouvel élément remplacera l'élément sélectionné.

Pour plus d'informations, consultez mon article Random Selection from Large Groups. Faites défiler jusqu'à "Que faire si je ne sais pas combien il y en a?" Le code est en C#, mais la discussion est agnostique.

1

Si vous ne pouvez pas utiliser String Array faites ceci:

Tous les fichiers de descripteur .xml dans Android se compilés à your.package.R classe.

Vous pouvez utiliser Java Reflection pour inspecter cette classe lors de l'exécution. Dans votre cas, R.id est une classe interne statique.

Class clazz = R.id.class; 
Field[] fields = clazz.getDeclaredFields(); 

// chose random field 
int rnd = (int) (fields.length * Math.random()); 
String randomString = getString(fields[rnd].getInt(null)); 
Questions connexes