【问题标题】:Checkboxes and if-else statements复选框和 if-else 语句
【发布时间】:2016-04-21 02:55:56
【问题描述】:

这是我在 Android Studio 中制作的一个小应用程序的源代码。当我调用此函数时,它假设将狗、猫和鹦鹉相互比较,然后将 int dogCounter 递增 5。但是,当我运行该函数时,它不会更新分数。

dogCounter= 0;
catCounter = 0;

//check boxes
cutestCheckBoxDog = (CheckBox)findViewById(R.id.CheckboxCutestDog);
cutestCheckBoxCat = (CheckBox)findViewById(R.id.CheckboxCutestCat);
cutestCheckBoxParrot =(CheckBox)findViewById(R.id.CheckboxCutestParrot);

//call methods
processCutest(cutestCheckBoxDog, cutestCheckBoxCat, cutestCheckBoxParrot);

showResultButton= (Button)findViewById(R.id.showResults);
showResultButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {

          Toast.makeText(getApplicationContext(),catCounter +  " " + dogCounter, Toast.LENGTH_LONG).show();

public void processCutest(CheckBox dog, CheckBox cat, CheckBox parrot){


    if (dog.isChecked() && !cat.isChecked() && !parrot.isChecked()){
        dogCounter += 5;
    }else if (cat.isChecked() && !dog.isChecked() && !parrot.isChecked()){
        catCounter += 5;
    } else{
        //nobody gets points
    }
}

编辑:抱歉组织不好。仍然很新,关于它的指针也很好。

package dogorcatperson.ivellapplication.com.dogorcatperson;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

private RadioGroup canineRadioGroup;
private RadioButton canineRadioButton;
private SeekBar seekBar;
private TextView seekBarTextView;
private CheckBox cutestCheckBoxDog;
private CheckBox cutestCheckBoxCat;
private CheckBox cutestCheckBoxParrot;
private RadioGroup droolRadioGroup;
private RadioButton droolRadioButton;
private Button showResultButton;
private int dogCounter;
private int catCounter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //call setup()
    setUp();

    //seekbar

    seekBar = (SeekBar) findViewById(R.id.seekBarFeline);
    seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

            seekBarTextView.setText("comfortableness: " + progress + "/" + seekBar.getMax());
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    });

}

public void setUp(){

    dogCounter= 0;
    catCounter = 0;

    canineRadioGroup =(RadioGroup)findViewById(R.id.radioGroupCanine);
    droolRadioGroup = (RadioGroup)findViewById(R.id.RadioGroupDrool);
    seekBarTextView = (TextView)findViewById(R.id.seekBarProgressTextView);

    //check boxes
    cutestCheckBoxDog = (CheckBox)findViewById(R.id.CheckboxCutestDog);
    cutestCheckBoxCat = (CheckBox)findViewById(R.id.CheckboxCutestCat);
    cutestCheckBoxParrot = (CheckBox)findViewById(R.id.CheckboxCutestParrot);

    //call methods
    processCutest(cutestCheckBoxDog, cutestCheckBoxCat, cutestCheckBoxParrot);
    processDrool(droolRadioGroup);
    processCanine(canineRadioGroup);

    showResultButton= (Button)findViewById(R.id.showResults);
    showResultButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Toast.makeText(getApplicationContext(),catCounter +  " " + dogCounter, Toast.LENGTH_LONG).show();

//                Intent i = new Intent(MainActivity.this, ResultActivity.class);
//                i.putExtra("catCounter", catCounter);
//                i.putExtra("dogCounter", dogCounter);
//                startActivity(i);
        }
    });
}

public void processCutest(CheckBox dog, CheckBox cat, CheckBox parrot){


    if (dog.isChecked() && !cat.isChecked() && !parrot.isChecked()){
        dogCounter += 5;
    }else if (cat.isChecked() && !dog.isChecked() && !parrot.isChecked()){
        catCounter += 5;
    } else{
        //nobody gets points
    }
}

 public void processDrool(final RadioGroup radioGroup){

    radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {

            int radioId= radioGroup.getCheckedRadioButtonId();
            droolRadioButton = (RadioButton)findViewById(radioId);

            if (droolRadioButton.getText().equals("yes")){
                dogCounter+= 5;
            }else if (droolRadioButton.getText().equals("no")){
                catCounter+= 5;
            }

        }
    });
}

  public void processCanine(final RadioGroup radioGroup){

    radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {

            int radioId= canineRadioGroup.getCheckedRadioButtonId();
            canineRadioButton = (RadioButton)findViewById(radioId);

            if (canineRadioButton.getText().equals("yes")){
                catCounter+= 5;
            }else if (canineRadioButton.getText().equals("no")){
                dogCounter+= 5;
            }

        }
    });
}

}

【问题讨论】:

  • “它不更新分数。” 不更新它在哪里?在用户界面中?在dogCounter/catCounter 字段中?
  • 问题中的代码是(道歉)一团糟。您能否发布最小但语法正确的代码?
  • 您的代码似乎缺少一些右括号。您可以完全按照您在开发环境中的方式复制它吗?我认为这可能很容易解决。看起来好像 processCutest 方法独立于单击按钮时运行。
  • @T.J.Crowder 是的 UI 更新。假设将汇总的分数传递给下一个活动对不起混乱。我编辑了第一篇文章以减少混乱,但我刚刚发布的内容都是来自源代码。
  • @user3481891 我添加了所有代码,希望您能做得更好。

标签: java if-statement checkbox


【解决方案1】:

我认为您只需要更改您的 processCutest 调用,使其进入 onClick 方法内部,但在 toast.makeText 调用之前。像这样:

showResultButton= (Button)findViewById(R.id.showResults);
showResultButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        processCutest(cutestCheckBoxDog, cutestCheckBoxCat, cutestCheckBoxParrot);

        Toast.makeText(getApplicationContext(),catCounter +  " " + dogCounter, Toast.LENGTH_LONG).show();

我假设实际的复选框是在其他地方定义的。你的复选框出现了吗?如果是这样,您可能还想将 processDrool 和 processCanine 调用也放在那里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多