Android Spinner OnItemSelected nicht genannt mit der gleichen Artikelnummer

Erste von allen, ich weiß, dass dies war, fragte, einige Zeit, aber auf neueren android-Versionen sieht es aus wie, dass die vorgeschlagenen Lösungen nicht funktioniert.
Ich brauche, dass mein spinner nennen OnItemSelected, auch wenn die Benutzer wählen Sie die gleiche Sache zweimal.
Ich habe gefunden, diese Klasse, sollte den trick tun:

    public class NDSpinner extends Spinner {

    private int lastSelected = 0;
    private static Method s_pSelectionChangedMethod = 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 NDSpinner(Context context) {
        super(context);
    }

    public NDSpinner(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public NDSpinner(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }







@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    if(this.lastSelected == this.getSelectedItemPosition())
        testReflectionForSelectionChanged();
    if(!changed)
        lastSelected = this.getSelectedItemPosition();

    super.onLayout(changed, l, t, r, b);
} 



    public void testReflectionForSelectionChanged() {
        try {
            Class noparams[] = {};          
            s_pSelectionChangedMethod.invoke(this, noparams);
        } catch (Exception e) {
            Log.e("Custom spinner, reflection bug: ", e.getMessage());
            e.printStackTrace();                
        }
    } 




    @Override
   public void onClick(DialogInterface dialog, int which) {    
        super.onClick(dialog, which);
    }
}

Dieser infact funktioniert, aber es hat einen bug: es Anrufs drücken Sie zweimal auf das Element das erste mal 🙁
Kann mir jemand sagen, wie kann ich dieses Problem lösen ?

Dank mates.

InformationsquelleAutor Luca D'Amico | 2013-11-01
Schreibe einen Kommentar