SeekBar的onProgressChanged()被调用两次

yadav_vi

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

@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 */
}

在这里,我已经检查了进度的值,这样就可以了not equal to 0,因此避免了第一次调用。但是,这样做的副作用是我无法将任何设置为0

为此可以采取什么措施?

yadav_vi

回调方法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仅当用户更改时的值

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章