Android 在两个侦听器之间切换
在我的程序中,我想使用两套轮子,如下所示:Android 在两个侦听器之间切换,android,listener,android-wheel,Android,Listener,Android Wheel,在我的程序中,我想使用两套轮子,如下所示: hours = (WheelView) findViewById(R.id.hour); NumericWheelAdapter hourAdapter = new NumericWheelAdapter(this, 0, 23, "%02d"); hourAdapter.setItemResource(R.layout.wheel_text_item); hourAdapter.setItemTextResource(R.id.text); hour
hours = (WheelView) findViewById(R.id.hour);
NumericWheelAdapter hourAdapter = new NumericWheelAdapter(this, 0, 23, "%02d");
hourAdapter.setItemResource(R.layout.wheel_text_item);
hourAdapter.setItemTextResource(R.id.text);
hours.setViewAdapter(hourAdapter);
hours.setCyclic(true);
这些控制盘有一个滚动监听器hours.addScrollingListener(滚动监听器)代码>
scrollinglistener如下所示:
// Wheel scrolled listener
OnWheelScrollListener scrolledListener = new OnWheelScrollListener() {
public void onScrollingStarted(WheelView wheel) {
}
public void onScrollingFinished(WheelView wheel) {
update();
}
};
我想用另一个的值设置一个控制盘,但是当我实例化两个侦听器并滚动第一个时,它会继续设置控制盘1,然后设置控制盘2,然后再设置控制盘1
是否可以禁用两个scrolledListener中的一个
我试过这个:
hours.addScrollingListener(null);
hours.setEnabled(false);
但这导致了一个错误,程序不得不停止
谢谢你的帮助
附言:轮子是从哪里来的
*Android轮子控制。
*从它的声音来看,您正在将两个OnWheelScrollListener添加到同一个WheelView侦听器列表中,该列表将回调它包含的每个侦听器,以解释您的行为。应该以与此类似的方式添加侦听器
hours = (WheelView) findViewById(R.id.hour);
hours.addScrollingListener(new OnWheelScrollListener() {
public void onScrollingStarted(WheelView wheel) {
}
public void onScrollingFinished(WheelView wheel) {
update();
}
});
hours2 = (WheelView) findViewById(R.id.hour2);
hours2.addScrollingListener(new OnWheelScrollListener() {
public void onScrollingStarted(WheelView wheel) {
}
public void onScrollingFinished(WheelView wheel) {
update();
}
});
另外,您希望使用removeScrollingListener(OnWheelScrollListener)方法删除侦听器…hours.addScrollingListener(null)
只是在列表中添加了一个空项,我想这会导致NullPointerException
编辑
OnWheelScrollListener listener = new OnWheelScrollListener() {
public void onScrollingStarted(WheelView wheel) {
}
public void onScrollingFinished(WheelView wheel) {
if (wheel.getId() == R.id.hour) {
//do wheel 1 logic
} else if (wheel.getId() == R.id.hour2) {
//do wheel 2 logic
}
};
hours.addScrollingListener(listener);
hours2.addScrollingListener(listener);
我已经联系了我正在使用的车轮的设计师Yuri,他给了我以下有效的解决方案:
// Wheel scrolled listener
OnWheelScrollListener scrolledListener = new OnWheelScrollListener() {
boolean syncInProgress = false;
public void onScrollingStarted(WheelView wheel) {
}
public void onScrollingFinished(WheelView wheel) {
if (syncInProgress) {
syncInProgress = false;
return;
}
syncInProgress = true;
if (wheel.getId() == R.id.wheel1) {
// do something
} else if (wheel.getId() == R.id.wheel2) {
// do something else
}
}
};
谢谢大家的帮助 不过,他可以在每个视图中添加相同的侦听器,并检查侦听器代码中的WheelView。如果(wheel==hours){}如果(wheel==hours2){}是真的,那看起来比我的解决方案更优雅。谢谢你的回复!我尝试过if构造,但它仍然会先更新第一个轮子,然后更新另一个轮子。将控制盘设置为某个值将激活侦听器。也许听众的反应与其他听众不同。请参考我的编辑以实现Maximus的建议,并确保您正确地建模