Переключение между двумя слушателями - PullRequest
0 голосов
/ 20 апреля 2011

В моей программе я хотел бы использовать два набора колес, как показано ниже:

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

Я хотел бы установить одно колесо со значением другого, но когда я создаю экземпляр двух слушателей и прокручиваю первого, оно переходит к установке первого колеса, а затем к второму колесу, а затем снова к одному.

Можно ли отключить один из двух scrolledListener?

Я пробовал это:

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

Но это дало ошибку, и программу пришлось остановить.

Спасибо за вашу помощь!

PS: колеса из * Android Wheel Control. * https://code.google.com/p/android-wheel/

Ответы [ 2 ]

0 голосов
/ 01 мая 2011

Я связался с конструктором Юрием используемого мной колеса, и он дал мне следующее решение, которое работает:

// 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
        }
    }
};

Спасибо всем за помощь!

0 голосов
/ 20 апреля 2011

Исходя из этого, вы добавляете оба 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);
...