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

问题描述 投票:0回答:2

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

无论复选框处于什么状态,我都必须能够使“执行”按钮起作用。

我设法使代码正常工作,但是现在单击按钮时它再次开始关闭,并且单击复选框时不显示图钉框。

这是我的代码:

        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);
    }


    }
android button checkbox
2个回答
1
投票

您正在另一个onClickListener内的GoBtn上设置onClickListener()。这意味着在您单击复选框之前,不会设置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()。让我知道您是否需要更多帮助。


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.