【发布时间】:2014-08-14 10:52:37
【问题描述】:
我创建了一个自定义SeekBarPreference,以便它显示一个可供选择的时间范围(比如0.2 秒到2.2 秒)。我的问题是 onProgressChanged() 被调用了两次——一次是progress = 0,第二次是progress = "actual value"。我将值存储在SharedPreference 中,以便稍后在我的应用程序中使用它。
这是我的代码 sn-p -
@Override
protected View onCreateDialogView() {
LayoutInflater inflator = ((PreferenceActivity) mContext)
.getLayoutInflater();
View view = inflator.inflate(R.layout.seek_bar, null);
mCurrentValue = PreferenceManager.getDefaultSharedPreferences(mContext)
.getFloat(this.getKey(), mDefaultValue);
......
SeekBar mSeekBar = (SeekBar) view.findViewById(R.id.seekbar);
mSeekBar.setOnSeekBarChangeListener(this);
mSeekBar.setMax(20);
mSeekBar.setProgress((int) ((mCurrentValue - mMinValue)
/ (mMaxValue - mMinValue) * 20)); // 20 = progress bar max value.
return view;
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
if (progress != 0) {
mCurrentValue = (float) ((float) progress / 20
* (mMaxValue - mMinValue) + mMinValue);
}
mValueText.setText(Float.toString(mCurrentValue));
/* mValueText is a TextBox where I display my Current Value */
}
在这里,我检查了 progress 的值,使其为not equal to 0,因此它避免了第一次调用。但是,这样做的副作用是我无法将任何内容设置为0。
有什么办法可以解决这个问题?
【问题讨论】:
标签: android seekbar preference