Jump to content

Spinner sélection de l'élément déjà sélectionné [RESOLUT]


jimmy

Recommended Posts

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...