如果在按下按钮之前未选中复选框,则应用程序崩溃

时间:2019-03-18 16:13:58

标签: android button checkbox

在选中复选框的同时,我的应用程序在导航方面起作用,但是当然在使用该应用程序时,不会总是选中该复选框,而是考虑其他原因。 我的代码:

无论复选框处于什么状态,我都需要Go btn能够工作

非常感谢

--------------------------------- UPDATE ------------- ---------------------

通过注释,我设法使代码起作用,但是现在单击按钮时,它已开始再次关闭,并且单击复选框时,销钉盒不显示?

这是我的代码

        checkBox = findViewById(R.id.checkBox);
        checkBox.setOnClickListener(this);
        GoBtn = findViewById(R.id.GoBtn);
        GoBtn.setOnClickListener(this);

    @Override
    public void onClick(View v) {
        //method called
        if (v == checkBox){
            if (checkBox.isChecked())
            {
                userPin.setVisibility(View.VISIBLE);
                //when checkbox is check, userPin becomes visible
            }
        }
        else if (v == GoBtn){
            ChangeActivityStudent();
        }
        {
            userPin.setVisibility(View.INVISIBLE);
            //otherwise userPin is invisible
        }

        // called when check box is clicked

        GoBtn.setOnClickListener(new View.OnClickListener() {
            @Override
           public void onClick(View v) {
               ChangeActivityStudent();
            }
        });
   }
    private void ChangeActivityStudent(){
       Intent intent = new Intent(MainActivity.this, StudentActivity.class);
       startActivity(intent);
    }


    }

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

您正在另一个onClickListener内的GoBtn上设置onClickListener()。这意味着,除非您单击CheckBox,否则将不会设置onClickListener上的GoBtn。将此替换为onClick()方法:

        @Override
        public void onClick(View v) {
            if(v == checkBox){
    if (checkBox.isChecked())
            {
                userPin.setVisibility(View.VISIBLE);
                //when checkbox is check, userPin becomes visible
            }
    }else if(v == GoBtn){
    ChangeActivityStudent();
    }

}

然后为onCreate()中的两个按钮设置侦听器。

checkBox.setOnClickListener(this);
GoBtn.setOnClickListener(this);

此外,我认为您不应该在onClickListener上设置checkBox,因为该按钮处于选中状态。并且您可能需要获取复选框状态。最好的使用方法是CheckBox.setOnCheckedChangeListener()。让我知道您是否需要更多帮助。

答案 1 :(得分:0)

您的GoBtn.setOnClickListener似乎位于错误的位置。
不应在onClick(View v)方法内。 当前,仅在单击复选框后才将逻辑应用于按钮单击。
可能不是导致您的应用崩溃的原因,但是如果不进行更改将无法正常工作。

您需要做的是将GoBtn.setOnClickListener移到您叫checkBox.setOnClickListener(this);的位置旁边
如果要以编程方式引起点击,请致电GoBtn.performClick()