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

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

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

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

Q&A

解決済

3回答

14740閲覧

同じ処理をする複数のボタンのコードをまとめることはできないか?

Haru_T

総合スコア34

Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

1グッド

1クリップ

投稿2016/10/21 07:46

英単語帳アプリを作っており、その中に用意する意味テストの機能に取り組んでいます。
単語を表示し、4つのボタンに書かれた選択肢から正解を選び、そのボタンクリック後に「正解」や「不正解」といった文字をテキストで表示させます。
その選択肢である4つのボタンのクリックリスナーで、4つすべてに同じ処理を行わせるのですが、コードが長くなってしまうのでこれをまとめて記述できる方法はないかと模索中です、、
もしまとめて記述する方法を知っている方がいれば是非教えて頂きたいです。

java

1 //正誤判定する 2 findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() { 3 public void onClick(View view) { 4 TextView wordView2 = (TextView) findViewById(R.id.word_view2); 5 if (mean1 == btn1.getText().toString()) { /*mean1は単語の正しい意味をさします*/ 6 wordView2.setText("正解!!"); 7 } else { 8 wordView2.setText("不正解。正解は「" + mean1 + "」"); 9 } 10 } 11 }); 12 13 findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() { 14 public void onClick(View view) { 15 TextView wordView2 = (TextView) findViewById(R.id.word_view2); 16 if (mean1 == btn2.getText().toString()) { 17 wordView2.setText("正解!!"); 18 } else { 19 wordView2.setText("不正解。正解は「" + mean1 + "」"); 20 } 21 } 22 }); 23 24 findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() { 25 public void onClick(View view) { 26 TextView wordView2 = (TextView) findViewById(R.id.word_view2); 27 if (mean1 == btn3.getText().toString()) { 28 wordView2.setText("正解!!"); 29 } else { 30 wordView2.setText("不正解。正解は「" + mean1 + "」"); 31 } 32 } 33 }); 34 35 findViewById(R.id.button4).setOnClickListener(new View.OnClickListener() { 36 public void onClick(View view) { 37 TextView wordView2 = (TextView) findViewById(R.id.word_view2); 38 if (mean1 == btn4.getText().toString()) { 39 wordView2.setText("正解!!"); 40 } else { 41 wordView2.setText("不正解。正解は「" + mean1 + "」"); 42 } 43 } 44 });
uhsi👍を押しています

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

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

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

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

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

guest

回答3

0

ベストアンサー

java

1 View.OnClickListener event = new View.OnClickListener() { 2 public void onClick(View view) { 3 Button b = (Button)view; 4 TextView wordView2 = (TextView) findViewById(R.id.word_view2); 5 if (mean1 == b..getText().toString()) { /*mean1は単語の正しい意味をさします*/ 6 b.setText("正解!!"); 7 } else { 8 b.setText("不正解。正解は「" + mean1 + "」"); 9 } 10 } 11 }; 12 findViewById(R.id.button1).setOnClickListener(event); 13 findViewById(R.id.button2).setOnClickListener(event); 14 findViewById(R.id.button3).setOnClickListener(event); 15 findViewById(R.id.button4).setOnClickListener(event);

テストしていないので動かないかもしれませんが、こんな感じでイベントを共有して、引数から受け取ったオブジェクトを使えばできたと思います。

投稿2016/10/21 08:07

intelf___

総合スコア868

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

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

Haru_T

2016/10/21 08:18

そのまま試してみたらできました!! ただ文字はtextviewに表示したかったのでsetTextのところを変えるだけですぐ自分のしたかったようにできました。本当にありがとうございます! 最初のコードよりぐっと短くなりとてもすっきりしました!!
swordone

2016/10/21 08:25

文字列はequalsで比較しないといけませんよ。
intelf___

2016/10/21 08:34

コメントありがとうございます。 確かにequalsで比較しないとだめですね 他にもドットが重なってたり恥ずかしいミスが・・・ 動いたなら良かったです。
Haru_T

2016/10/21 08:36

私も文字列の比較について調べたときにequalsを使うというのを見たことがありますが、「==」のままで実行できました、、、equalsに記述を変えた方がよいのでしょうか?
intelf___

2016/10/21 08:43

mean1のStringオブジェクトを直接ボタンにセットしてたんですね。 もしそれを今後変更する予定がないなら変えなくてもいいかもしれませんが、テキストのセットの方式を変えたときに正しい動作をしなくなります。 それほど手間でもないのでequalsに変えてはどうでしょう。
Haru_T

2016/10/21 08:46

とても分かりやすい説明ありがとうございます!! 今後のためにもequalsに記述を変えておきます。
swordone

2016/10/21 10:04

Stringに対するequalsと==の挙動はここでも多数質問されているので調べてみてください。
guest

0

似た処理を共通メソッドとしてまとめる・・・というのでは満足できないでしょうか?質問内容の範囲ではそれで十分だと思えます。

投稿2016/10/21 08:32

KSwordOfHaste

総合スコア18392

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

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

Haru_T

2016/10/21 08:38

ありがとうございます。共通の部分を取り出してコードをまとめて記述することができました!
guest

0

こういうことを意図してますか?

http://kenkenppa.seesaa.net/article/248780392.html

投稿2016/10/21 07:59

PineMatsu

総合スコア3579

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

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

Haru_T

2016/10/21 08:20

イメージはそのような感じです。 試してみようとしましたが、switch文の中にまたif文を記述するという少し複雑な構造になり、変数にエラーが出たりと向いていないようでした(´・ω・`) せっかくアドバイスいただいたのに申し訳ないです、、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問