私はその数をEditTextPreference
0から9までの数でなければなりません。他の文字を防ぐことはできますが、バックスペースを防ぐことはできません。Backspace +Okay=空の値。空の値は、値が取得されて数値に解析されるとクラッシュすることを意味します。
現時点では、プリファレンスがいつ変更されるか、特定のキーがあり長さがないかどうかを確認し、変更される場合は「0」で再保存します。これを行うためのより簡単な組み込みの方法はありますか?「requirevalue」プロパティ、または少なくともdigits
、変更された設定を取得できるようにするなど、より自動化されたものですか?(数字が「0123456789」の場合、空であってはなりません)。
これまでの設定アクティビティでは、次のようになっています。
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
//Prevent EditText from being non number
String type = this.findPreference(key).getClass().getSimpleName();
if( type.equals("EditTextPreference")
//Put key of any allowed to be blank here...
&& prefs.getString(key, "0").length()==0 ){
this.findPreference(key).setSummary("0");
SharedPreferences.Editor prefedit = prefs.edit();
prefedit.putString(key, "0");
prefedit.commit();
}
updateSummaries();
}
(セットサマリーが機能していません-^。プロパティを確認できると、android:digits="0123456789"
プロパティを確認できるので、空白にする必要のあるキーを入力する必要がありません。)
または、メインアクティビティで、すべての数値設定を文字列に入れ、文字列をチェックし、適切でない場合は0に設定してから、各文字列を解析できます。私がそれらをより多く使用するにつれて、これは自動的ではなく、あまり魅力的ではないと感じます。
String sTT = prefs.getString("mykey", "0");
>> x10
if(sTT.length()==0){ sTT="0"; }
>> x10
tt = Long.parseLong( sTT );
>> x10, different types
(これはまだ最善の方法かもしれません...?)