Использование счетчика в качестве меню - двоичный выбор - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть вращающийся элемент управления, позволяющий моему пользователю выбирать радиостанцию, но (из-за ограниченного пространства экрана) я также пытаюсь использовать тот же элемент управления для отключения / включения звука и выключения.Я хочу изменить форматирование выбранной станции, когда пользователь выбирает MUTE (а также повтор MUTE на UNMUTE) и возвращает его к нормальному состоянию, когда он выбирает UNMUTE или снова выбирает станцию.

Моя проблема в том, что, если я выбираю MUTE, хотя я могу переформатировать текст, чтобы показать приглушенную станцию, элемент управления вращением думает, что выбранный индекс соответствует записи MUTE / UNMUTE, и поэтому выбор UNMUTE незапустить событие, потому что, кажется, не было изменений.Как поймать выделение UNMUTE?

private RadioArrayAdapter adapter;
private CharSequence mSelectedFrequency = "Radio 4";
private SceneFragmentListener mListener;

public interface SceneFragmentListener{
    void onRadioSet(StringSetting);
}

//Spinner populated when the fragment is set up in onCreateView()

spnRadio.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        TextView t = (TextView) view;
        String s = t.getText();

        if ("OFF".equals(s)) {
            adapter.setSelection(position); //This just causes the selected item to be highlighted
            t.setTextColor(getResources().getColor(R.color.colorRadioOff));
            t.setPaintFlags(t.getPaintFlags()&(~Paint.STRIKE_THRU_TEXT_FLAG));
            mSelectedFrequency = "OFF";
            mListener.onRadioSet("OFF");

        } else if "MUTE".equals(s) {
            t.setText(mSelectedFrequency);
            t.setTextColor(getResources().getColor(R.color.colorRadioMute));
            t.setPaintFlags(t.getPaintFlags()|Paint.STRIKE_THRU_TEXT_FLAG);
            mRadioFreqs.set(0,"UNMUTE");
            mListener.onRadioSet("MUTE");

        } else if "UNMUTE".equals(s) {
            t.setText(mSelectedFrequency);
            t.setTextColor(getResources().getColor(R.color.colorRadioOn));
            t.setPaintFlags(t.getPaintFlags()&(~Paint.STRIKE_THRU_TEXT_FLAG));
            mRadioFreqs.set(0,"MUTE");
            mListener.onRadioSet("UNMUTE");

        } else {
            adapter.setSelection(position);
            t.setTextColor(getResources().getColor(R.color.colorRadioOn));
            t.setPaintFlags(t.getPaintFlags()&(~Paint.STRIKE_THRU_TEXT_FLAG));
            mSelectedFrequency = s;
            mListener.onRadioSet(s);
        }
    }
}

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

Спасибо за поиск ...

...