- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我创建了一个自定义 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/
如何监控 ExoPlayer 上的进度变化? 我试图实现一个隐藏的 MediaController 并覆盖 setOnSeekBarChangeListener 方法,但目前没有成功。我想知道是否有其
我有一个带有两个搜索栏的 Android 应用程序,并且我已将它们设置为除非同时按下它们,否则该应用程序不会响应。我的问题是,当它们都被按下时,方法 onProgressChanged(SeekBar
我有一个后台工作人员报告计算进度。它在 ProgressChangedEventArgs 中返回它正在处理的当前行号。我可以从那里确定完成的百分比 (int) (100 * (double)e.Pro
在我的 android 应用程序中,我有一个加载 javascript 文件的 webview。 javascript 依次加载一些图像。 //javascript file var imageObj
这是我使用的代码: import android.support.v4.app.Fragment; import android.content.Context; import android.os.
Chrome/WebView 版本:53 和 54 测试版 示例网址:bbc.com , cnn.com 重现问题的步骤: 启动基于 webview 的应用程序,并安装了 chrome/webview
如果我通过 seek.setProgress(1) 设置 seekbarprogress 的最小值并通过 if 语句在 onProgressChanged() 中定义条件,则 seek.setOnSe
我有一些具体要求。我有一个搜索栏。现在假设进度为 0,因此当我增加搜索栏时它必须直接达到 50,而当我增加搜索栏时它必须直接达到 100。它工作正常。但是现在,当我减少进度时,它必须再次变为 50,而
我有自定义搜索栏,我可以通过设置新的进度可绘制对象来更改 onProgressChanged 中的颜色: seek.setProgressDrawable(res.getDrawable(R.draw
如果我通过代码设置搜索栏的进度或最大值,则会触发 onProgressChanged 事件。如何防止这种情况?我希望事件仅在用户通过拖动搜索栏的拇指从 UI 修改进度值时触发。 最佳答案 设置您的 O
我创建了一个自定义 SeekBarPreference,它会显示可供选择的时间范围(例如 0.2 秒到 2.2 秒) .我的问题是 onProgressChanged() 被调用了两次 - 一次使用
我在我的 Android 应用程序中使用 Sherlock 侧面导航 fragment 。但是,我使用 6 个 fragment ,全部包含带有进度条的 Web View 。 这是其中一个 fragm
我的应用程序使用 BackgroundWorker 将文件上传到 FTP 服务器。一切正常,但 OnProgressChanged 事件似乎无法正常工作。 虽然 OnProgressChanged 将
我创建了一个可重复使用的自定义组件(一个带有 Canvas 位图的自定义 View ),它是一个可用于任何事物(音量控制/评级系统)的 slider 。问题是我需要监控它的进度,比如搜索栏 onPro
当我以编程方式设置 SeekBar 的进度时,我的 onProgressChanged() 事件没有被触发,但当我物理移动 SeekBar slider 时它确实被触发得很好。 我希望事件在使用 se
如何从代码调用 SeekBar 的 onProgressChanged ?是否有类似的东西,比如执行点击按钮? 最佳答案 在搜索栏对象上使用此监听器 SeekBar seek=new
我已成功将此网站 (http://code.google.com/p/range-seek-bar/) 中的 RangeSeekbar 实现到我的应用程序中。 很多人现在遇到的问题是,我们无法在 Ra
我是 android 开发的新手,我使用 onProgressChanged 获取当前进度,因为进度是函数的参数。 但是当用户释放 seekbar 而不是立即值时,我只想获得进度的最终值。 提前致谢。
我需要在 WebView -> WebChromeClient -> onProgressChanged() 中访问进度值。进度整数值不会从 0 增加到 100,而是会跳来跳去。这是加载一页和相关进度
我是一名优秀的程序员,十分优秀!