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

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

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

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

Android Studio

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

Q&A

解決済

2回答

2710閲覧

チェックボックス式のAlertDialogが表示されない。

ryochinn

総合スコア7

Java

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

Android Studio

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

0グッド

0クリップ

投稿2016/09/04 08:52

編集2016/09/04 12:01

androidstudioを使用してJavaの勉強を始めて3日目の初心者です。
現在、書籍を見ながらAlertDialogをオプションメニューに組み込んでみたのですが、
どうしてもチェックボックス式のダイアログボックスのみ起動しません。
どうしてなのか教えていただけると幸いです。
また、こうしたほうが良い等あれば、合わせてお教えしていただけるとありがたいです。
何卒宜しくお願い致します。
追記:チェックボックス以外の部分はすべて削除しました。
イメージ説明
###発生している問題・エラーメッセージ

チェックボックス式のAlertDialogが反応しない。
(ボタンは表示されるが、押してもAlertDialogがでてこない)
エラーメッセージ
特に表示されてないと思います

###該当のソースコード
Java

package jp.androidbook.optionmenu; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; public class MainActivity extends AppCompatActivity { static final String CHECKBOX_TEST = "checkbox button"; boolean[] selectedItems = {false, false, false}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); menu.add(CHECKBOX_TEST); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if (CHECKBOX_TEST.contentEquals(getTitle())) { final Activity activity = this; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("選択してください"); final String[] items = {"ONE", "TWO", "THREE"}; builder.setMultiChoiceItems( (CharSequence[])items, selectedItems, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i, boolean checked) { selectedItems[i] = checked; } }); builder.setPositiveButton("OK!", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int item) { String result = ""; for (int i = 0; i < selectedItems.length; i++) { if (selectedItems[i]) { result += "".equals(result) ? "" : ","; result += items[i]; } } Toast toast = Toast.makeText(activity, result + "を選択しました", Toast.LENGTH_LONG); toast.show(); } }); builder.show(); } return super.onOptionsItemSelected(item); } }

###試したこと
実機でもGenymotionの仮想デバイスでも同様に動きませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

swordone

2016/09/04 08:53

コードはコード用の表記法があるのでそれに従って下さい。質問編集画面でコード部分を選択し<code>を押すとコードが読みやすい形にフォーマットされます。
ryochinn

2016/09/04 09:01

大変申し訳ございませんでした、修正いたしました。 ご指摘ありがとうございます!
guest

回答2

0

原因はこれですね。これ以外に比較ですべてこの形になっていますが。

java

1if (MENU_ITEM.equals(item.getTitle()))

MenuItem#getTitle()の返り値はCharSequence型で、Stringとのequalsが成立しません。
なので、toString()してString型にするか、

java

1if (MENU_ITEM.equals(item.getTitle().toString()))

比較メソッドをequalsの代わりにcontentEqualsを使って下さい。

java

1if (MENU_ITEM.contentEquals(item.getTitle()))

###過去の回答
「ボタンを押しても~」とあるが、ボタンに対するOnClickListenerが見当たらないため、ボタンをおした時の動作がそもそも定義されてない可能性があります。ダイアログ表示のコードと思しき箇所はメニューの中の項目を選択した時のもの(onOptionsItemSelected)なので、メニューを出してどれかを押さないとダイアログは出てきません。

投稿2016/09/04 10:02

編集2016/09/04 11:11
swordone

総合スコア20649

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

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

ryochinn

2016/09/04 10:19

ご回答誠にありがとうございます。 自分の理解と書き方が悪いのですが、オプションメニューにcheckbox buttonというチェックボックス式のダイアログを表示させようと思って作成したボタンを押してもダイアログが出てこないという意味です。 手元の書籍にはpublic void onClick(DialogInterface dialogInterface, int i, boolean checked) {… } がチェックボックス式のダイアログのイベント用メソッドだと書いてあるのですが、 これはボタンを押したときの定義とは別物なのでしょうか 本当に初心者なため、変な質問でしたら大変申し訳ございません。
swordone

2016/09/04 10:22

「オプションメニューにダイアログを表示する」とはどういう意味ですか? そもそも「オプションメニュー」をどう捉えているのですか?
ryochinn

2016/09/04 10:56

画像を追加したのですが、オプションメニューはあのようにアプリ内でandroid端末のメニューボタンを押したときに出てくるメニューの事だと思います。 あの中のcheckbox button という物を押すとアラートダイアログが出るようにしたかったのです。 説明がわかりづらく本当に申し訳ございません…
ryochinn

2016/09/04 11:50

やってみたのですが、変わらず表示されませんでした。 他の表示されたアラートダイアログの部分を削除して、コードを書き直したのですが もしお時間があれば変な部分があればお教えいただきたいです。 お忙しい中お時間を取らせてしまって大変申し訳ございません…
guest

0

ベストアンサー

どこが悪いのか切り分けるために下記を行ってください。
1-ブレークポイントをチェックボックスを表示するifブロック内に設定する。
2-デバッグ実行を行ってください。

止まらなければそもそもチェックボックスを表示する処理に到達していないですね。

投稿2016/09/04 09:32

yona

総合スコア18155

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

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

ryochinn

2016/09/04 10:10

ご返答ありがとうございます、 止まらなかったので、おっしゃる通り表示する処理に到達していないようです。 そこを踏まえてもう少し頑張ってみます。 本当にありがとうございました。
yona

2016/09/04 10:50

他のダイアログを出す処理には来ているかも重要ですね。
ryochinn

2016/09/04 11:03

他のダイアログは大丈夫なのでチェックボックスに関する部分がおかしいのだと思います。 本当にありがとうございます。
yona

2016/09/04 13:59

では、if文でブレークポイントを貼り、到達するか、しないか、到達した場合は変数を見てください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問