我的代码使用传递给onProgressChanged()方法的fromUser参数来区分用户和代码与SeekBar的交互:
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean fromUser) {
if (fromUser) {
// execute only if it was user interaction with the SeekBar
...
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用robotium测试我的SeekBar时,我无法"模拟用户与SeekBar的交互":
solo.setProgressBar(mSeekBar, newValue);
Run Code Online (Sandbox Code Playgroud)
使用fromUser == false执行onProgressChanged()回调.
是否有可能编写Robotium测试来设置SeekBar的进度并同时模拟用户交互(fromUser == true)?
谢谢!
解决方案(思考)
SeekBar是ProgressBar的间接子类,它有一个公共的setProgress(int),只有一行调用package方法setProgress(int,boolean)并将fromUser == false传递给它.可以使用Reflections并直接调用setProgress(int,boolean)并传递所需的fromUser参数:
private void setSeekBarProgress(int newProgress, boolean fromUser) {
Method privateSetProgressMethod = null;
try {
privateSetProgressMethod = ProgressBar.class.getDeclaredMethod("setProgress", Integer.TYPE, Boolean.TYPE);
privateSetProgressMethod.setAccessible(true);
privateSetProgressMethod.invoke(mSeekBar, newProgress, fromUser);
} catch (ReflectiveOperationException e) {
e.printStackTrace();
fail("Error while invoking private method.");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1101 次 |
| 最近记录: |