0

在我的程序中,我想使用两组轮子,如下所示:

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(scrolledListener);

滚动监听器看起来像这样:

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

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

是否可以禁用两个滚动侦听器之一?

我试过这个:

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

但这给出了一个错误,程序必须停止。

谢谢你的帮助!

PS:轮子来自* Android Wheel Control。* https://code.google.com/p/android-wheel/

4

2 回答 2

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);
于 2011-04-20T17:03:58.973 回答
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
        }
    }
};

谢谢大家的帮助!

于 2011-05-01T10:54:47.063 回答