Autore Topic: Custom Spinner  (Letto 417 volte)

Offline Luca91

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 12.04 / Windows 7
Custom Spinner
« il: 01 Novembre 2013, 16:22:12 CET »
0
Salve ragazzi,
come sapete se selezionate due volte lo stesso item in uno spinner, non verrà eseguita nuovamente l'operazione richiesta. Questo accade perchè lo spinner salva l'ultimo item usato e se risulta essere uguale al nuovo item selezionato ignora l'operazione.
Io vorrei che cio' non accadesse, quindi mi ho effettuato diverse ricerche e a quanto ho capito la soluzione consiste nel creare un custom spinner. Ho trovato su stackoverflow questa classe che dovrebbe fare al caso mio:
Codice: [Seleziona]
public class SpinnerTrigger extends Spinner {

public SpinnerTrigger(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
}

@Override
public void setSelection(int position, boolean animate) {
    ignoreOldSelectionByReflection();
    super.setSelection(position, animate);
}

private void ignoreOldSelectionByReflection() {
    try {
        Class<?> c = this.getClass().getSuperclass().getSuperclass().getSuperclass();
        Field reqField = c.getDeclaredField("mOldSelectedPosition");
        reqField.setAccessible(true);
        reqField.setInt(this, -1);
    } catch (Exception e) {
        Log.d("Exception Private", "ex", e);
        // TODO: handle exception
    }
}

@Override
public void setSelection(int position) {
    ignoreOldSelectionByReflection();
    super.setSelection(position);
}

}

Ho creato quindi una nuova classe nel mio progetto, chiamata appunto SpinnerTrigger, e modificato nell'activity
Codice: [Seleziona]
Spinner spinner = (Spinner) findViewById(R.id.ModifierSpinner);
in
Codice: [Seleziona]
SpinnerTrigger spinner = (SpinnerTrigger) findViewById(R.id.ModifierSpinner);

Ora pero' non so come modificare il file .xml dell'activity nel quale ho:
Codice: [Seleziona]
<Spinner
        android:id="@+id/ModifierSpinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/SaveBTN"
        android:layout_toLeftOf="@+id/DiscardBTN"
        android:layout_toRightOf="@+id/SaveBTN" />

Credo che quello Spinner debba diventare SpinnerTrigger. Pero' ogni volta che compilo mi dice che non lo riesce a trovare..

Qualche aiuto ?

Grazie :)


Post unito: 02 Novembre 2013, 00:20:02 CET
Risolto, basta inserire il nome del package + quello della classe :)
« Ultima modifica: 02 Novembre 2013, 00:20:02 CET da Luca91, Reason: Merged DoublePost »

Offline giuseppesorce

  • Utente junior
  • **
  • Post: 92
  • Respect: +6
    • Google+
    • warpmobile_it
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6,Nexus 5,Nexus 4, Galaxy Nexus, Nexus s, Nexus One,Htc Wildfire S, Nexus 7... etc
  • Sistema operativo:
    Ubuntu 14.04
Re:Custom Spinner
« Risposta #1 il: 02 Novembre 2013, 08:19:24 CET »
0
Devi usare la sintassi

Codice (XML): [Seleziona]
<com.example.SpinnerTrigger
android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_alignBottom="@+id/SaveBTN"
       android:layout_toLeftOf="@+id/DiscardBTN"
       android:layout_toRightOf="@+id/SaveBTN"
>

</com.example.SpinnerTrigger>

Ovvio che devi sostituire il package com.example con il package dove hai messo la classe
The code is joy and passion but it has a high degree of suffering