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的建议,并确保您正确地建模