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

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

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

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

Q&A

解決済

3回答

1046閲覧

switch caseで一個ずつ処理していく方法がわからない

NB16

総合スコア14

Android Studio

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

0グッド

0クリップ

投稿2017/07/17 14:40

###前提・実現したいこと
初心者です。
androidstudioでswitchボタンをONにすると設定されていません。から設定されています。にかわるシステムを作っています。
それで、条件分岐であるswitch文を使ってみたのですが、実行時、case1のswitchボタンをONにするとcase1とcase2が同時に設定されています。に変わってしまいます。
僕はそれをcase1の部分だけを設定されています。に変わるようにしたいです。
説明が下手ですいません。

###該当のソースコード
import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;

import static to.msn.wings.boshitetyo.R.id.textView1;

public class MainActivity extends Activity implements OnCheckedChangeListener {
private TextView textView[] = new TextView[5];

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView[0] = (TextView) findViewById(textView1); Switch switch1 = (Switch) findViewById(R.id.switch1); switch1.setOnCheckedChangeListener(this); textView[1] = (TextView) findViewById(R.id.textView2); Switch switch2 = (Switch) findViewById(R.id.switch2); switch2.setOnCheckedChangeListener(this); } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){ for(int textViewNum = 1; textViewNum < 6; textViewNum++){ switch (textViewNum) { case 1: if (isChecked) { textView[0].setText("設定中です。"); Toast.makeText(MainActivity.this, "ONにしました。", Toast.LENGTH_SHORT).show(); } else { textView[0].setText("設定されていません。"); Toast.makeText(MainActivity.this, "OFFにしました。", Toast.LENGTH_SHORT).show(); } break; case 2: if (isChecked) { textView[1].setText("設定中です。"); Toast.makeText(MainActivity.this, "ONにしました。", Toast.LENGTH_SHORT).show(); } else { textView[1].setText("設定されていません。"); Toast.makeText(MainActivity.this, "OFFにしました。", Toast.LENGTH_SHORT).show(); } break; } } }

}

###試したこと
switch文のほかにif文などを使ってみたのですが、やっぱりだめでした。

###補足情報(言語/FW/ツール等のバージョンなど)
一番新しいバージョンを使っています。

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

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

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

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

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

swordone

2017/07/17 15:02

コードはマークダウンしてください。質問編集画面でコードを反転選択し、画面上部にある<code>ボタンを押してください。また、「一番新しいバージョン」は閲覧するタイミングによって変わるので、具体的なバージョンを記載してください。
guest

回答3

0

ベストアンサー

下記のリンク先は CheckBox の実装例ですが、 Switch と同じ CompoundButton のサブクラスなので、読み替えることができます。
現状のまとめて処理するのではなく、 Switch ごとに設定状態の変更を処理してあげればわかりやすいと思います。

CheckedChange イベントを処理する

投稿2017/07/17 15:53

ykws

総合スコア1236

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

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

NB16

2017/07/18 14:50

返信遅くなりました。 回答ありがとうございます。 とても参考になりました。
guest

0

自分の書いたコードをよく見ましょう。
for文でtextViewNumを1から5まで増やしています。
switch文のcaseには1と2があるので、当然両方とも実行されます。

投稿2017/07/17 14:58

yona

総合スコア18155

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

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

swordone

2017/07/17 15:02

たぶんそういうことではない
yona

2017/07/17 15:21

あっていますよ。何が違いますか?
swordone

2017/07/17 15:25

この人の質問がcaseとかswitchとかごっちゃになっているせいですが…意図は switch1だけをONにした時、switch文でcase 1で「設定中です」、case 2で「設定されていません」としたいのに両方で「設定中です」になる だと思います。
yona

2017/07/17 15:50

その意図は分かりますが、そもそもこのコードを改善してそのようにできると思えなかったので、現状の現象が起きる原因だけを回答しました。 また、質問者が1つのスイッチのオンオフで全てのスイッチのオンオフを更新したいかどうかがわからないため、とりあえずの回答になってしまいました。 ごめんなさい。
NB16

2017/07/18 14:52

回答ありがとうございます! 質問が大変わかりにくくてすいません。
NB16

2017/07/18 14:53

後、返信が遅くなり申し訳ございません。
guest

0

onCheckedChangedメソッドの仮引数isCheckedは、
チェック状態が変化したものの変化後のチェック状態が渡されます。
リスナを登録したいずれかのスイッチをONに変化させたのなら
isCheckedはtrueになるためすべてのif文が通ります。

Switchを配列にして、各Switchに対してisChecked()を使って状態を確認するほかありません。

投稿2017/07/17 14:56

swordone

総合スコア20649

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

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

NB16

2017/07/18 14:54

返信遅くなりました。 回答ありがとうございます! とても参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問