【问题标题】:Android - How to enable a button if a radio button is checked?Android - 如果选中单选按钮,如何启用按钮?
【发布时间】:2016-09-27 04:16:43
【问题描述】:

我想知道/学习如何在/如果选中单选按钮时启用按钮

已完成的步骤

我创建了一个片段并在一个带有 3 个单选按钮的单选组内

目标

我的主要目标是在选中单选按钮时启用按钮,并在未选中单选按钮时禁用它

代码

到目前为止我有这个代码

public class Operations extends Fragment
{
    RadioButton surfArea, rad, diam;
    RadioGroup radG;
    Button openSelect;

    public Operations()
    {
        // Required empty public constructor
    }

    public static Operations newInstance()
    {
        return new Operations();
    }

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater,
                             ViewGroup container,
                             Bundle savedInstanceState)
    {
        View rootView = inflater.inflate(R.layout.fragment_operations_sphere, container, false);

        surfArea = (RadioButton) rootView.findViewById(R.id.RB_surfArea);
        rad = (RadioButton) rootView.findViewById(R.id.RB_Rad);
        diam = (RadioButton) rootView.findViewById(R.id.RB_Diam);
        openSelect = (Button) rootView.findViewById(R.id.btn_open_select);

        radG = (RadioGroup) rootView.findViewById(R.id.RG_group);

        openSelect.setEnabled(false);

        openSelect.setOnClickListener(new View.OnClickListener()
        { //This piece of code is for testing purposes
            @Override
            public void onClick(View v)
            {
                if (surfArea.isChecked())
                {
                    openSelect.setEnabled(true); //I detected my mistake here, so I would like to know a better way to achieve this
                    Intent sa = new Intent(getContext(), OperSphere.class);
                    startActivity(sa);
                }
            }
        });

        return rootView;
    }

    @Override
    public void onResume()
    { //Here the radio button unchecks
        radG.clearCheck();
        super.onResume();
    }
}

问题

当单选按钮被选中时如何启用按钮?

一些例子会很棒

提前致谢

【问题讨论】:

  • 单选按钮不能取消选中。您必须手动实现该功能。
  • 是的,它在 public void onResume() 方法中,我研究了如何做到这一点,并在 SO 中发布了一个问题

标签: android radio-button enable-if


【解决方案1】:

对不起,这里试试这个解决方案;

由于您使用的是 RadioGroup,请在此设置监听器以相应地禁用或启用按钮。

RadioGroup radG = (RadioGroup) findViewById(R.id.yourRadioGroup);        
radG.setOnCheckedChangeListener(new OnCheckedChangeListener() 
{
    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        // checkedId is the RadioButton selected
        switch(checkedId) 
        {
        case R.id.surfArea:     
        //enable or disable button
        break;

        case R.id.rad: 
        //enable or disable button        
        break;

        case R.id.diam:  
        //enable or disable button       
        break;
        }
    }
});

【讨论】:

  • 对不起,这不能回答我的问题
  • 这会进入 onCreate 方法还是在它的外部?
【解决方案2】:

只需使用以下sn-p:

  @Override
        public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {

            switch (checkedId) {
                case R.id.RB_surfArea:
                   // here set button enable/disable to true / false
                    break;
                case R.id.RB_Rad:
                     // here set button enable/disable to true / false
                    break;
                case R.id.RB_Diam:
                     // here set button enable/disable to true / false
                    break;
            }
        }

【讨论】:

    【解决方案3】:

    您可以像其他人建议的那样在单选按钮上设置一个侦听器,然后使用您制作的功能打开和关闭单选按钮。

    radG.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            if (checkedId == R.id.radioButtonId) {
                toggleCheck();
            }
        }
    });
    

    toggleCheck() 可以是这样的:

    if (radG.isChecked()) {
        radG.clearCheck();
        button.setEnabled(false);
    } else {
        radG.select();
        button.setEnabled(true);
    }
    

    【讨论】:

      猜你喜欢
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-15
      • 1970-01-01
      • 2018-08-28
      相关资源
      最近更新 更多