jimmy Posté(e) 30 janvier 2012 Share Posté(e) 30 janvier 2012 Bonjour Mon souci est indiqué dans le titre je cherche par n'importe quel moyen de récupérer l'évenement lorsque l'élément sélectionné de mon spinner est sélectionné une deuxième fois. Mon code : Spinner spinner = (Spinner) findViewById(R.id.test); ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.alpha_level, android.R.layout.simple_spinner_item); adapter .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); spinner.setSelection(1); spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(context, "YES", 3000).show(); } @Override public void onNothingSelected(AdapterView<?> parent) { Toast.makeText(context, "NO", 3000).show(); } }); Mais rien ne se passe lorsque je clique sur l'élément déjà sélectionné, ce qui est le comportement normal je sais. Seulement j'ai vu ce post http://stackoverflow...stions/5335306/ J'ai donc essayé la classe fourni dans la réponse mais le onClick n'est jamais appelé... donc cela ne marche pas. Je cherche donc une solution. Merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
jimmy Posté(e) 30 janvier 2012 Auteur Share Posté(e) 30 janvier 2012 Je me répond donc a moi même il suffit que je demande de l'aide pour finalement trouver la réponse ^^ Donc voici ma classe Spinner : import java.lang.reflect.Method; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.widget.Adapter; import android.widget.AdapterView; import android.widget.Spinner; public class MySpinner extends Spinner { private static Method s_pSelectionChangedMethod = null; private Object ob=null; static { try { Class noparams[] = {}; Class targetClass = AdapterView.class; s_pSelectionChangedMethod = targetClass.getDeclaredMethod("selectionChanged", noparams); if (s_pSelectionChangedMethod != null) { s_pSelectionChangedMethod.setAccessible(true); } } catch( Exception e ) { Log.e("Custom spinner, reflection bug:", e.getMessage()); throw new RuntimeException(e); } } public MySpinner(Context context) { super(context); } public MySpinner(Context context, AttributeSet attrs) { super(context, attrs); } public MySpinner(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public void testReflectionForSelectionChanged() { try { Class noparams[] = {}; s_pSelectionChangedMethod.invoke(this, noparams); } catch (Exception e) { Log.e("Custom spinner, reflection bug: ", e.getMessage()); e.printStackTrace(); throw new RuntimeException(e); } } @Override public boolean onTouchEvent(MotionEvent m) { if (m.getAction()==MotionEvent.ACTION_DOWN) { ob=this.getSelectedItem(); } return super.onTouchEvent(m); } @Override public boolean performClick() { boolean handled = false; if (!handled) { handled = true; Context context = getContext(); final Adapter adapter = getAdapter(); CharSequence[] values = new String[adapter.getCount()]; for(int i=0; i< adapter.getCount();i++){ values[i] = (String)adapter.getItem(i); } AlertDialog.Builder builder = new AlertDialog.Builder(context); if (super.getPrompt() != null) { builder.setTitle(super.getPrompt()); } builder.setSingleChoiceItems(values, getSelectedItemPosition(), new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub MySpinner.this.setSelection(arg1); if (getSelectedItem().equals(ob)){ testReflectionForSelectionChanged(); } arg0.dismiss(); } }).show(); } return handled; } } Donc il suffit de surcharger performClick :) et cela permet aussi de pouvoir faire une dialog personalisé si besoin (se que je n'est pas fait). Si vous avez des questions n'hésitez pas je pourrais peut être y répondre. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.