2013-05-24 7 views
5

Ho un android Dialog con un 3 numberpickers interno. La modifica del terzo selettore attiva una modifica dei valori visualizzati dei primi 2 pickers. Tuttavia ho notato quando cambio i valori visualizzati, e chiamoAndroid NumberPicker esegue il wrapping dei valori quando i valori visualizzati vengono modificati

setWrapSelectorWheel(false) 

mostra ancora i nuovi valori arrotolati visivamente (posso vedere l'ultimo valore sopra il primo).

Se tocco il selettore, si inserisce improvvisamente nel selettore di non avvolgimento. Quello che è strano è che io chiamo

getWrapSelectoWheel() 

dopo aver impostato i valori visualizzati e restituisce falso ... proprio come l'ho impostato. Ma visivamente è sbagliato.

Qualche idea cosa sta succedendo?

Grazie mille!

+0

Hai mai trovato una soluzione? Sto ancora affrontando lo stesso problema, impostando il selettore si ripristina programmaticamente le immagini a capo. – Gabriel

risposta

3

Non so quale versione di Android stai usando, ma ti suggerisco di leggere lo source code for the NumberPicker (v4.2.2). Forse è necessario attivare una chiamata al metodo privato initializeSelectorWheelIndices che può essere eseguito tramite una chiamata ad alcuni metodi pubblici.

Anche se penso che il tuo utilizzo del raccoglitore, cambiando la bandierina dell'involucro, sia un po 'insolito. Non vuoi che questo comportamento sia coerente? In tal caso, effettuare una chiamata a setWrapSelectorWheel una volta dopo aver impostato i valori min e max e quindi lasciarlo in pace.

11

Ho trovato una soluzione, Daniel era sulla strada giusta, tuttavia sembra che initializeSelectorWheelIndices sia in realtà una cosa negativa una volta che hai già impostato i valori. Per questo motivo, è necessario chiamare setMinValue e setMaxValue PRIMA di impostare i valori. Tuttavia, se hai già un array impostato sul selettore, se chiami setMaxValue con un valore superiore rispetto alla matrice corrente, ti verrà restituita un'eccezione ArrayIndexOutOfBounds.

La soluzione quindi è quello di cancellare i vecchi valori di visualizzazione, impostare il valore massimo, allora è possibile chiamare setWrapSelectorWheel e setDisplayValues:

public void updatePickerValues(String[] newValues){ 
    picker.setDisplayedValues(null); 
    picker.setMinValue(0); 
    picker.setMaxValue(newValues.length -1); 
    picker.setWrapSelectorWheel(false); 
    picker.setDisplayedValues(newValues); 
} 
+1

Buon lavoro. Ha funzionato per me –

1

Ho verificato questo comportamento come bene su KitKat. È un bug Impossibile trovare un rapporto esistente, quindi ne ho creato uno nuovo qui: bug# 98319

Per le risposte precedenti ho scoperto che facendo setWrapSelectorWheel (falso) l'ultima chiamata dopo tutte le chiamate di configurazione funzionerà per la maggior parte degli scenari. Nel mio caso sto cambiando dinamicamente i limiti di NumberPicker mentre l'utente sta interagendo e non riesco a farlo funzionare al 100%. Sto optando per vivere con il selezionatore dell'involucro.