2013-05-24 10 views
5

私はアンドロイドDialogの中に3 numberpickersを持っています。 3番目のピッカーを変更すると、最初の2の表示値の変更がトリガーされます。pickersしかし、私は私が表示された値を変更したときに気づいた、と視覚的に包まれたとして、それはまだ(私は最初の1以上の最後の値を見ることができる)、新たな値を示しAndroidのNumberPickerは、表示された値が変更されたときに値をラップします

setWrapSelectorWheel(false) 

を呼び出しました。

ピッカーに触れると、突然非ラップセレクタホイールにスナップします。私が設定したように、表示された値を設定した後、私は

getWrapSelectoWheel() 

と呼んでいます。しかし視覚的には間違っています。

何が起こっているのですか?

多くの感謝!

+0

あなたは解決策を見つけましたか?私はピッカーがプログラムでラップビジュアルをリセットするように設定して、同じ問題を解決しています。 – Gabriel

答えて

3

実行中のAndroidのバージョンがわかりませんが、source code for the NumberPicker (v4.2.2)をお読みになることをおすすめします。おそらく、いくつかのパブリックメソッドの呼び出しを介して行うことができるプライベートメソッドinitializeSelectorWheelIndicesへの呼び出しをトリガする必要があるかもしれません。

ピッカーの使い方は、折り返し旗を一部変えることで少し珍しいようですが、あなたはこの振る舞いを一貫させたくありませんか?その場合は、最小値と最大値を設定した後、一度だけsetWrapSelectorWheelに電話をかけてください。

11

解決策を見つけたDanielは正しい軌道に乗っていましたが、既に値を設定しておけばinitializeSelectorWheelIndicesは実際には悪いことです。このため、値を設定する前にsetMinValuesetMaxValueに電話する必要があります。ただし、ピッカーに配列が既に設定されている場合、setMaxValueを現在の配列よりも高い値で呼び出すと、ArrayIndexOutOfBounds例外が発生します。

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

良い仕事。私のために働いた。 –

1

私はキットカットにもこの動作を確認した:あなたはsetWrapSelectorWheelsetDisplayValuesを呼び出すことができます

次いで、この溶液を、その後、古い表示値をクリアし、あなたの最大値を設定し、することです。それはバグです。既存のレポートを見つけることができませんでしたので、ここで新しいレポートを作成しました:bug# 98319

前回の回答以前の設定では、ほとんどのシナリオでsetWrapSelectorWheel(false)を最後に呼び出したことがわかりました。私の場合、私はNumberPickerの限界を動的に変更しています。ユーザーが対話しているので、100%動作するようにはできません。私はラップセレクタで生きることを選択しています。

関連する問題