web-dev-qa-db-fra.com

Comment définir la position dans le spinner?

J'ai lu avec BufferedReader le texte d'un fichier système; Ce texte contient par exemple 5 mots, mais dans un autre cas, il peut contenir moins de mots ou plus. Ensuite, j'ai mis ce texte (les mots mentionnés) dans une chaîne unique et enregistré cette chaîne dans les préférences partagées. Ensuite, j'ai créé un spinner à partir de cette chaîne . Le code est le suivant:

Spinner spinner = new Spinner(this);
    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, Android.R.layout.simple_spinner_dropdown_item, yourString.split(" "));
    spinner.setAdapter(spinnerArrayAdapter);

Ensuite, je lis le texte d'un autre fichier. Ce texte contient toujours un mot. Et ce mot est identique à l’un des mots que j’avais lus dans le premier fichier (par exemple, si le premier fichier que je lisais contenait 5 mots et que l’un de ces mots était "noir", le deuxième fichier que j’ai lu aussi contient "noir"). Et je dois faire de ce mot particulier (qui existe dans les deux fichiers) comme option choisie par défaut dans mon spinner.

Par exemple:

La première chaîne contient: rouge, bleu, jaune, noir, blanc

La deuxième chaîne contient: jaune

Je crée un spinner à partir de la première chaîne afin que les options de spinner soient renseignées exactement comme suit: "rouge, bleu, jaune, noir, blanc" et que l'option sélectionnée par défaut soit le rouge (car il s'agit du premier de ma première chaîne), mais je dois faire en jaune l'option sélectionnée par défaut dans ce cas, car la deuxième chaîne contient "jaune". Les mots dans les deux chaînes sont toujours différents.

BTW: Je sais comment enregistrer la position dans une flèche, mais je ne sais pas comment définir la position dans une roue si je compare deux chaînes et que l'une d'elles contient plus de mots.

19
Adam

Voici la solution, grâce à l'aide de sfratini.

Utilisation:

spinner.setSelection(getIndex(spinner, myString));

Ensuite:

private int getIndex(Spinner spinner, String myString){

        int index = 0;

        for (int i=0;i<spinner.getCount();i++){
            if (spinner.getItemAtPosition(i).equals(myString)){
                index = i;
            }
        }
        return index;
}
50
Adam

je pense que cette ligne va vous aider 

 String[] a= new String[10];
 a[0]="abc";
 a[1]="xyz";
 a[2]="pqr";
 .....
 .....
 spin = (Spinner) findViewById(R.id.TimeSpinner);
 ArrayAdapter<String> adapter = new ArrayAdapter<String>(TimeSpin.this, Android.R.layout.simple_spinner_item, a);  
   adapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item)‌​;  
   spin.setAdapter(adapter); 
   spin.setSelection(0);
11
Harsh Trivedi

Vous n'êtes pas obligé d'utiliser Adapter ... il vous suffit de convertir un tableau de chaînes en liste
Et ensuite, utilisez indexOf (Object Object) pour obtenir l’index de votre rotation en utilisant la couleur sélectionnée

String [] strings = yourString.split(" ");
List<String> strList = new ArrayList<String>(Arrays.asList(strings));
//Or you can load array from xml...
//List<String> strList2 = Arrays.asList(getResources().getStringArray(R.array.array_color));
spinner.setSelection(strList.indexOf("colorvalue"));
1
MohamedZaatari