gpt4 book ai didi

android - SeekBar 的 onProgressChanged() 被调用两次

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:16 28 4
gpt4 key购买 nike

我创建了一个自定义 SeekBarPreference,它会显示可供选择的时间范围(例如 0.2 秒到 2.2 秒) .我的问题是 onProgressChanged() 被调用了两次 - 一次使用 progress = 0,第二次使用 progress = "actual value"。我将该值存储在 SharedPreference 中,以便稍后在我的应用程序中使用它。
这是我的代码 fragment -

@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 的值,使其不等于 0,因此它避免了第一次调用。但是,这样做的副作用是我无法将任何内容设置为 0

解决这个问题的方法是什么?

最佳答案

回调方法onProgressChanged()有一个boolean参数fromUser
使用此参数,我们可以确定更改是来自框架还是由用户自己进行。

因此,像这样的实现 -

@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
if (fromUser) { // If the changes are from the User only then accept the
// changes
/* Instead of -> if (progress != 0) { */

mCurrentValue = (float) ((float) progress / 20
* (mMaxValue - mMinValue) + mMinValue);
mCurrentValue *= 10;
mCurrentValue = Math.round(mCurrentValue);
mCurrentValue /= 10;
}

mValueText.setText(Float.toString(mCurrentValue));
}

仅在用户更改时设置 TextView 的值。

关于android - SeekBar 的 onProgressChanged() 被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25306289/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com