首页 > 解决方案 > 使用微调器作为菜单 - 二进制选择

问题描述

我有一个微调器控件,允许我的用户选择一个广播电台,但(由于屏幕空间有限)我也尝试使用 SAME 控件来静音/取消静音和关闭。我想在用户选择 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);
        }
    }
}

我尝试插入一个布尔阻塞器并在静音和取消静音 if 块中递归调用 onItemSelected() 但在我看来,直到我的代码完成之前才真正进行选择,所以这没有效果。

谢谢你看...

标签: javaandroidspinner

解决方案


推荐阅读