【问题标题】:how to get an answer from a radiogroup of checkboxes before enabling a button in android studio在android studio中启用按钮之前如何从复选框的radiogroup中获得答案
【发布时间】:2016-03-04 05:02:28
【问题描述】:

//这是我下面的代码。我希望能够让用户在他们能够进入“TEST 3”之前勾选“左、“中心”、“右”复选框之一。在基本上勾选一个复选框之前,不应按下按钮“NEXT”

public class Test2 extends AppCompatActivity {

private static Button button102;
private CheckBox checkBox1, checkBox2, checkBox3;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test2);

    checkBox1 = (CheckBox) findViewById(R.id.checkBox1);
    checkBox2 = (CheckBox) findViewById(R.id.checkBox2);
    checkBox3 = (CheckBox) findViewById(R.id.checkBox3);

    OnClickButtonListener102();
}

public void onCheckboxClicked(View view) {

    switch(view.getId()) {

        case R.id.checkBox1:

            checkBox2.setChecked(false);
            checkBox3.setChecked(false);

            break;

        case R.id.checkBox2:

            checkBox3.setChecked(false);
            checkBox1.setChecked(false);

            break;

        case R.id.checkBox3:

            checkBox1.setChecked(false);
            checkBox2.setChecked(false);

            break;
    }
}

//by clicking 'next' you reset the page
public void OnClickButtonListener102() {

    button102 = (Button) findViewById(R.id.button1002);
    button102.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent("com.example.Test2");
                    startActivity(intent);
                }
            }
    );

}
}

【问题讨论】:

    标签: java android


    【解决方案1】:

    将按钮声明为禁用

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        button102 = (Button) findViewById(R.id.button1002);
        button102.setEnabled(false);
    }
    

    并在使用Button.setEnabled(boolean) 单击单选按钮时启用该按钮:

    button102 = (Button) findViewById(R.id.button1002);
    button102.setEnabled(true);
    switch(view.getId()) {
        case R.id.checkBox1:
            checkBox2.setChecked(false);
            checkBox3.setChecked(false);
            break;
        case R.id.checkBox2:
            checkBox3.setChecked(false);
            checkBox1.setChecked(false);
            break;
        case R.id.checkBox3:
            checkBox1.setChecked(false);
            checkBox2.setChecked(false);
            break;
    }
    

    说明:

    • 您可以在 XML 布局中默认禁用按钮
    • 我不明白你如何为radiobuttons 声明listener,但我猜它只能由有效元素触发,这就是为什么我总是启用button 而不是在case 语句中启用
    • 如果你想多次使用buttonradiobuttons,你可以将其声明为类属性并在onCreateonStart步骤中获取对象

    更新:

    还有一个问题,如果我勾选该框,然后取消勾选它,它允许我进入下一个活动,因为按钮不再被禁用...我该如何解决这个问题?

    FAST WAY?如果未选择其他,则不允许取消选择。

    button102 = (Button) findViewById(R.id.button1002);
    button102.setEnabled(true);
    switch(view.getId()) {
        case R.id.checkBox1:
            checkBox1.setChecked(true);
            checkBox2.setChecked(false);
            checkBox3.setChecked(false);
            break;
        case R.id.checkBox2:
            checkBox3.setChecked(false);
            checkBox2.setChecked(true);
            checkBox1.setChecked(false);
            break;
        case R.id.checkBox3:
            checkBox1.setChecked(false);
            checkBox2.setChecked(false);
            checkBox3.setChecked(true);
            break;
    }
    

    但如果您只想选择一个复选框,您可以按照this answer 中的逻辑进行设置,但我会强烈建议根据为此设计的 RadioButtons 更改您的 CheckBox 元素,

    【讨论】:

    • 谢谢一百万,你真是个天才!只有一个问题,如果我勾选该框,然后取消勾选它,它允许我进入下一个活动,因为该按钮不再被禁用......我该如何解决这个问题?再次感谢
    • 是的,它现在完美运行,感谢您对 Jordi 的所有帮助。我猜你的名字是西班牙人......所以 HALA MADRID :D gracias amigo
    • 加泰罗尼亚语和来自巴塞罗那的 jejeje... 但无论如何欢迎您,您也必须知道,如果此答案解决了您的问题,您可以通过单击复选标记将其标记为已接受,两者都会获得一些声誉; )
    • 哈哈不知道你来自巴塞罗那! :p 我打勾了,谢谢你让我知道,因为我不知道你能做到这一点,我只是新手
    • 很高兴再次提供帮助!有时在stackoverflow上开始有点困难嘿嘿......最好的问候!
    猜你喜欢
    • 2012-03-11
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 2012-11-05
    • 2023-03-25
    • 2011-04-16
    • 2020-11-15
    • 2021-11-08
    相关资源
    最近更新 更多