2010-04-26 7 views
2

J'essaie d'afficher une chaîne aléatoire chaque fois que vous appuyez sur un bouton à partir d'un ensemble de chaînes défini dans strings.xml. ceci est un exemple de l'ID de chaîneAfficher la chaîne aléatoire

<string name="q0"> 
    <string name="q1"> 
    <string name="q2"> 
    <string name="q3"> 
    <string name="q4"> 

code Java pour obtenir une chaîne aléatoire.

private static final Random rgenerator = null; 

    int RandomQ = R.string.q0 (rgenerator.nextInt(5) + 1); 
    String q = getString(RandomQ); 

si je tente d'utiliser ce code java je reçois une erreur à « Q0 » dans R.string.q0 qui est The method q0(int) is undefined for the type R.string si je tente d'utiliser la solution rapide et créer une méthode, cela fonctionne. mais il ne me laisse pas enregistrer ou exécuter l'application, car il remplace ma méthode de création et montre ce message

R.java was modified manually! Reverting to generated version! 

Merci pour la lecture.

+1

R.string.qo est simplement utilisé comme un entier pour pointer vers votre chaîne q0, et en mettant des parenthèses après cela, vous essayez de l'appeler comme une fonction et de lui passer un nombre aléatoire. Cela échouera car vous ne pouvez pas traiter un entier statique de cette manière. Je peux comprendre ce que vous essayez de faire, mais ce n'est pas la façon de le faire, je suggère d'apprendre quelques-unes des bases de Java. J'ai répondu à cette question ci-dessous en utilisant des tableaux à cordes, il devrait être assez clair et une solution assez élégante à votre problème. Si cela n'a pas de sens, demandez. – stealthcopter

Répondre

21

Vous pouvez définir vos chaînes dans un tableau qui contribuera à simplifier cette tâche (res/valeurs/array.xml):

<string-array name="myArray"> 
    <item>string 1</item> 
    <item>string 2</item> 
    <item>string 3</item> 
    <item>string 4</item> 
    <item>string 5</item> 
</string-array> 

Vous pouvez ensuite créer un tableau pour contenir les chaînes et sélectionnez une chaîne aléatoire à partir du réseau à utiliser:

private String[] myString; 

myString = res.getStringArray(R.array.myArray); 

String q = myString[rgenerator.nextInt(myString.length)]; 

Exemple Code:

package com.test.test200; 

import java.util.Random; 

import android.app.Activity; 
import android.content.res.Resources; 
import android.os.Bundle; 
import android.widget.TextView; 

public class Test extends Activity { 
/** Called when the activity is first created. */ 

    private String[] myString; 
    private static final Random rgenerator = new Random(); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


    Resources res = getResources(); 

    myString = res.getStringArray(R.array.myArray); 

    String q = myString[rgenerator.nextInt(myString.length)]; 

    TextView tv = (TextView) findViewById(R.id.text1); 
    tv.setText(q); 
} 
} 
+0

merci pour la réponse rapide. J'ai fait comme vous l'avez dit mais j'ai une erreur de syntaxe à la fin du premier "myString". l'erreur est "Erreur de syntaxe sur le jeton"; ", attendu". en changeant ; à, dose pas d'aide. – zaid

+0

J'ai modifié cette question pour inclure un exemple de code à utiliser. – stealthcopter

+0

merci beaucoup pour l'aider un noob. – zaid

-2

Pourquoi avez-vous besoin de cela?

R.string.q0

En supposant getString(RandomQ) est une déclaration valable, je pense

int RandomQ = rgenerator.nextInt(5) + 1; 

fonctionnerait très bien.

En outre, en note: Beaucoup de fois ces autofixes dans votre IDE ne sont pas fiables et dangereux à utiliser. À moins que vous ne sachiez pourquoi il vous dit de faire quelque chose, ne le faites pas.

+0

Cela ne fonctionnera pas car cela va juste essayer d'obtenir une chaîne à partir d'un nombre aléatoire, par opposition à l'une des 5 chaînes. – stealthcopter

1

créer tableau de chaînes dans res/valeurs/array.xml:

<?xml version="1.0" encoding="utf-8"?> 
    <resources> 
<string-array name="custom_array"> 
    <item>aalia</item> 
    <item>asin</item> 
    <item>sonakshi</item> 
    <item>kajol</item> 
    <item>madhuri</item> 
</string-array> 
</resources> 

puis dans votre activité Recopiez le code

String[] array = context.getResources().getStringArray(R.array.custom_array); 

     String randomStr = array[new Random().nextInt(array.length)]; 

     text_dialog.setText(""+randomStr); 
Questions connexes