J'ai un problème avec setSelection sur Spinner. Je règle la valeur à présélectionner lorsque le compteur est affiché dans le code, mais cela n'a aucun effet et la première alternative de la liste est toujours sélectionnée. Le code ressemble à ceci:
LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View dialogView = li.inflate(R.layout.edit_event, null);
...
ArrayList<String> routes = new ArrayList<String>();
// routes filled with values at runtime
...
ArrayAdapter<String> aa = new ArrayAdapter<String>(GOFdroid.this, Android.R.layout.simple_spinner_item, routes);
aa.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
Spinner destSpinner = (Spinner) dialogView.findViewById(R.id.edit_event_destination);
String dest = events.get(pos).getDestination();
int routesPos = routes.indexOf(dest);
Log.d(TAG, "Dest: " + dest + ", pos: " + routesPos);
destSpinner.setSelection(routesPos);
destSpinner.setAdapter(aa);
Le code fonctionne comme prévu, à l'exception de la partie setSelection, et je ne peux tout simplement pas comprendre pourquoi.
La présentation XML de la visière ressemble à ceci (pas la disposition entière, mais seulement la partie visière):
// DESTINATION
<TextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Destination:" />
<Spinner
Android:id="@+id/edit_event_destination"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:Prompt="@string/choose_dest"
Android:layout_marginBottom="10dip"
Android:text="" />
L'aide est très appréciée!
Linus
Essayez de déplacer l'appel vers setSelection()
après l'appel à setAdapter()
.
J'ai eu le même problème. Dans mon cas, setAdaper
et setSelection
étaient dans le bon ordre! La forme exécutée onCreate
fonctionnait, mais lorsqu'elle était exécutée à partir de onResume
, elle n'avait aucun effet.
La solution est d'appeler setSelection(my_pos, true)
. Remarquez le deuxième paramètre.
Vous pourriez essayer
mSpinner.post(new Runnable() {
public void run() {
mSpinner.setSelection(1);
}
});
cela affichera l'action exécutable à exécuter dès que la vue est créée
Dans mon cas, aucune des réponses n’a fonctionné, alors j’ai mis en file d'attente la setSelection via un gestionnaire
new Handler().postDelayed(new Runnable() {
public void run() {
mSpinner.setSelection(1);
}
}, 100);
Cela pourrait poser des problèmes lors de l'exécution sur des périphériques lents, mais je travaille pour un périphérique spécifique, il est donc correct d'utiliser ce hack
utilisez ceci
sp2.setAdapter(sp2.getAdapter());
sp2.getAdapter().notifyDataSetChanged();
sp2.setSelection(0, false);
Spinner.setSelection()
ne fonctionne pas si vous appelez avant Spinner.setAdapter()
Essayez d’appeler setSelection()
après l’appel de setAdapter ().
Reason Behind this : lorsque vous appelez Spinner.Selection()
avant de définir un adaptateur, cela signifie simplement que vous essayez de définir spinner sur index personnalisé à l'aide de setSelection () lorsqu'il ne contient aucune donnée ou que nous pouvons dire que spinner a item = 0.
so setSelection(1)
signifie la mise à 1 de l'index pour spinner qui a max item = 0; Bien que Spinner lui-même gère cette valeur outBoundIndex afin que votre application ne se bloque pas.
l'appel à SetSelection()
devrait se faire après setAdapter () uniquement
De même, si vous avez un Spinner.SetOnItemSelectedListener()
et que vous avez un problème, onItemSelected(AdapterView<?> parent, View view, int position, long id)
est activé avec la valeur de position = 0 lorsque l'activité est chargée et vous devez utiliser ce modèle.
Spinner.SetAdapter()
Spinner.setSelection();
Spinner.setOnItemSelectedListener();
La solution consiste à appeler setSelection (my_pos, true). Remarquez le deuxième paramètre.
N'oubliez pas que si vous appelez animate, configurez les paramètres de présentation, puis:) Exemple:
LinearLayout.LayoutParams spinnerLp = (LinearLayout.LayoutParams) spinner.getLayoutParams();
spinner.setSelection(selectedPositionAge, true);
spinnerLp.gravity = Gravity.CENTER;
spinner.setLayoutParams(spinnerLp);
les rembourrages réglés manuellement sur la roulette doivent être réinitialisés manuellement
J'ai eu le même problème avec un spinner à l'intérieur d'un fragment : setSelection
qui fonctionne correctement pendant la onCreate
au premier démarrage de l'activité, mais pas lorsque je fais pivoter l'écran. Je l'ai résolu en appelant setSelection
dans la méthode onViewStateRestored
du fragment au lieu de l'appeler dans la méthode onCreate
. Je ne suis pas sûr, mais je pense que vous ne pouvez pas utiliser setSelection
tant que la vue n'est pas complètement chargée, même si vous pouvez findViewById
le.
Aucune des réponses précédentes n'a fonctionné pour moi. Ce qui a bien fonctionné, cependant, a été de créer la variable d'instance mSpinner
dans la méthode onCreateView()
de mon fragment (ou dans la méthode onCreate()
de votre activité), puis de le faire dans ma méthode onLoadFinished()
...
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
adapter.swapCursor(cursor);
//mSpinner.setAdapter(adapter);
mSpinner.setSelection(mSelectedIndex);
}
essayez ceci, cela a fonctionné pour moi:
Spinner destSpinner = (Spinner)dialogView.findViewById(R.id.edit_event_destination);
destSpinner.setSelection(0);
String dest = events.get(pos).getDestination();
int routesPos = routes.indexOf(dest);
destSpinner.setAdapter(aa);
Log.d(TAG, "Dest: " + dest + ", pos: " + routesPos);
destSpinner.setSelection(routesPos);
Parfois, il est possible que nous ne configurions pas les écouteurs, car le compteur peut être défini sur une certaine valeur et désactivé selon les besoins.
Cela peut entraîner que setSelection () ne sélectionne pas de valeur, car elle nécessite un écouteur.
Assurez-vous que setOnItemSelectedListener () de Spinner est défini sur un écouteur personnalisé, comme ci-dessous.
Même si spinner est désactivé, nous devons définir un écouteur comme ci-dessous pour que la méthode setSelection () fonctionne.
spinnerListener.setOnItemSelectedListener(spinnerListener);
AdapterView.OnItemSelectedListener spinnerListener = new
AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
//Your code
}
}
spinnerListener.setSelection(0);