質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

2回答

1738閲覧

javaでアプリ開発の勉強をしているのですが、チェックボックスの使い方がわかりません

ken0625

総合スコア40

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2015/06/20 10:13

public class MainActivity extends Activity implements CompoundButton.OnCheckedChangeListener {
private TextView textView;
public int Bunbo =1;
public int sum=0;
double ratio = (sum/Bunbo)*100;
private CheckBox varCheckBox1,varCheckBox2,varCheckBox3;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); LinearLayout varLinearLayout = new LinearLayout(this); varLinearLayout.setOrientation(LinearLayout.VERTICAL); setContentView(varLinearLayout); textView = new TextView(this); varLinearLayout.addView(textView); Button button = new Button(this); button.setText("Button"); button.setLayoutParams(new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { textView.setText("幸福度は"+ratio+"です"); } }); varLinearLayout.addView(button); varCheckBox1 = new CheckBox(this); varCheckBox1.setText("友達が3人以上いる"); varCheckBox1.setOnCheckedChangeListener(this); varLinearLayout.addView(varCheckBox1); varCheckBox2 = new CheckBox(this); varCheckBox2.setText("親と仲がいい"); varCheckBox2.setOnCheckedChangeListener(this); varLinearLayout.addView(varCheckBox2); Bunbo+=1; varCheckBox3 = new CheckBox(this); varCheckBox3.setText("恋人がいる"); varCheckBox3.setOnCheckedChangeListener(this); varLinearLayout.addView(varCheckBox3); Bunbo+=1; } public void onCheckedChanged(CompoundButton cb,boolean isChecked) { if (varCheckBox1.isChecked()) { sum += 1; } if (varCheckBox2.isChecked()) { sum += 1; } if (varCheckBox3.isChecked()) { sum += 1; } }

チェックボックスにチェックすると変数sumが+1されてその合計を質問数で割ることで幸福度を%表示するっていう簡単なプログラムなんですが、これだとsumもbunboもチェックボックスの結果が反映されてないみたいで、どうすればいいかがわかりません...

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

sumを変えたところでratioの値は変わらないし,TextViewにも何ら変化を及ぼしません.
所望の動作をさせたいのならばsumの値を変化させたあとratioを再計算し,
TextViewに文字を再度セットする必要があります.
更にこの場合,どのチェックボックスかは関係なしに「チェックが付いたり外れたりした時」に動作する必要がある点を考慮する必要があると思います.

投稿2015/06/20 12:38

swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ken0625

2015/06/20 16:40

なるほどそういうことですか...押したり外したりするときに更新するように作らなきゃいけないってことですよね? 更新させるメソッドとかって調べれば出てくるんでしょうか... あとよく考えたら確かにどのチェックボックスかは関係なかったですありがとうございます! 質問によって得点に傾斜つけようとしてたときもあったのでそのままにしてました~_~; ただチェックボックスって一つごとにインスタンス作ってisCheck()メソッドで取得する以外の方法があるんですか? 質問ばっかりですいません...
swordone

2015/06/20 16:59

そもそもCompoundButton.OnCheckedChangeListener#onCheckedChangedというメソッドは「チェックボックスの状態が変化した時」に呼ばれるメソッドで, 引数のCompoundButton cbは「変化したチェックボックス(などの2値を取るボタン)のオブジェクト」,boolean isCheckedは「変化後の値」を表します. チェックボックスすべてにこのリスナーを登録しているので,どのチェックボックスが変化してもこのメソッドが起動します.そして,この引数のisCheckedをみれば,クリックされたチェックボックスの状態を知ることができます. 今回の場合はクリックされたチェックボックスを問題にしないので,これだけ見れば処理できることになります.
ken0625

2015/06/20 19:15

質問したあとに自分でやってたら解決しました! 質問ごとに傾斜がかけられるようにしたかったので、チェックボックスにイベントリスナーを登録してやるようにしました。そしてその中のメソッドにチェックがついたのか外れたのかを判定してその都度再計算するように組みました。 なので解決はしたのですが、今後の参考にちゃんと理解したいので、さっきの回答にさらに質問したいのですがisCheckedはメソッドだから何かのインスタンスを指定して行うわけですよね? cb.isChecked()とやればどれでもいいけどどれかがチェックされたってことになるんですか? そこらへんがよくわかってないんです...
swordone

2015/06/21 01:25

このメソッドに渡されるisCheckedはプリミティブなboolean値です. 例えばチェックボックスvarCheckBox1に「チェックが付いた」場合, cbにはvarCheckBox1のオブジェクトが,isCheckedにはtrueが渡ります. どのチェックボックスであれ,チェックが付いていない状態からチェックが付いた状態に変化した時,このメソッドのisCheckedにはtrueが渡ります.なので, if(isChecked) ... という形で「いずれかのチェックボックスにチェックが付いたら」という条件を表すことができます. どのチェックボックスが変わったかという条件も if(cb == varCheckBox1){...} if(cb == varCheckBox2){...} という書き方ができます.
swordone

2015/06/21 01:38

↑「いずれかのチェックボックス」と書きましたが,もちろん対象のチェックボックスにこのリスナーを登録しないと反応しませんのでご注意を.
ken0625

2015/06/21 03:18

なるほどすごくわかりやすいです。ありがとうございました!!
guest

0

このままだと、sumは増えるけど、その後の処理が無いからじゃないですか?
さらに、sumはチェックしたり外したりすると、どんどん増えていく処理ですね。

投稿2015/06/20 11:47

MasaakiIrie

総合スコア1021

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ken0625

2015/06/20 19:17

ありがとうございますおかげで解決しました!チェック外すときにsumを減らす処理を忘れてましたありがとうございます。 他のも解決はしたのですが、詳しくいろいろ答えてくれた方がいたのでそちらをベストアンサーにさせていただきましたすいません...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問