在两个听众之间切换

时间:2011-04-20 16:47:21

标签: 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);
hours.setViewAdapter(hourAdapter);
hours.setCyclic(true);

这些轮子有一个scrollinglistener hours.addScrollingListener(scrolledListener);

scrollinglistener看起来像这样:

// Wheel scrolled listener
OnWheelScrollListener scrolledListener = new OnWheelScrollListener() {
    public void onScrollingStarted(WheelView wheel) {
    }
    public void onScrollingFinished(WheelView wheel) {
    update();
    }
};

我想设置一个轮子与另一个轮子的值,但是当我实例化两个听众并滚动第一个时,它继续设置轮子一个然后轮子二轮然后再轮一个。

是否可以禁用两个scrolledListener中的一个?

我试过这个:

    hours.addScrollingListener(null);
    hours.setEnabled(false);

但是这出错了,程序必须停止。

感谢您的帮助!

PS:轮子来自  * Android车轮控制。  * https://code.google.com/p/android-wheel/

2 个答案:

答案 0 :(得分:0)

从它的声音中你将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);

答案 1 :(得分:0)

我联系了我正在使用的车轮设计师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
        }
    }
};

谢谢大家的帮助!