【问题标题】:App crashes if checkbox isn't clicked before button is pressed如果在按下按钮之前未单击复选框,则应用程序崩溃
【发布时间】:2019-08-09 01:48:35
【问题描述】:

勾选复选框时,我的应用程序在导航方面工作,但当然在使用应用程序时,复选框不会总是被选中,而是考虑其他内容。

无论复选框的状态如何,我都需要能够让“开始”按钮工作。

我设法让代码工作,但现在每当单击按钮时它又开始关闭,并且单击复选框时不显示 pin 框。

这是我的代码:

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


    }

【问题讨论】:

  • “GoBtn”初始化在哪里以及您遇到的错误崩溃是什么?
  • @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);用户名 = findViewById(R.id.UserName); userPassword = findViewById(R.id.userPassword); userPin = findViewById(R.id.userPin); checkBox = findViewById(R.id.checkBox); GoBtn = findViewById(R.id.GoBtn);如果在选中复选框之前按下 gobtn,则应用程序只会在模拟器上崩溃,没有错误

标签: android button checkbox


【解决方案1】:

您在另一个onClickListener() 中设置onClickListener 上的GoBtn。这意味着在您单击 CheckBox 之前,不会设置 GoBtn 上的 onClickListener。将您的 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);

此外,我认为您不应该在checkBox 上设置onClickListener,因为它是一个选中按钮。您可能需要获取复选框状态。最好的使用方法是CheckBox.setOnCheckedChangeListener()。如果您需要更多帮助,请告诉我。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多