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

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

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

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

Q&A

解決済

1回答

2518閲覧

ActionBarのmenuItemsクリックした時のDialogがすぐ落ちる...

kaaa

総合スコア29

Android

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

0グッド

1クリップ

投稿2015/03/17 02:05

編集2015/03/17 03:04

ListFragmentの次のページに、Actionbar Activityのクラスがあり、その中の
ActionBarのmenuItemsクリックした時、あるボタンからDialogFragmentを表示させているのですが、すぐにDialogが閉じ、ListFragmentに戻ってしまいます。

Dialogをすぐに勝手に閉じないようにしたいのと、ListFragmentに遷移しないようにし、そのままActionbar Activity内に留めたいのですが、どのようにしたらよろしいでしょうか?

お知恵をお借り出来ますと幸いです。

lang

1ActionBarActivity クラス 2 3 @Override 4 public boolean onOptionsItemSelected(MenuItem item) { 5 switch (item.getItemId()) { 6 7 //遷移先がフラグメントなので、FragmentTransactionで書く。 8 case R.id.menu_home: 9 FragmentTransaction ft = getFragmentManager().beginTransaction(); 10 ft.replace(R.id.container, new Top()); 11 break; 12 13 case R.id.menu_dialog: 14 AlertDialogFragment alertDialog = new AlertDialogFragment(); 15 alertDialog.show(getFragmentManager(), "AlertDialogFragment"); 16 break; 17 } 18 finish(); 19 return super.onOptionsItemSelected(item); 20 } 21 22 23

DialogFragment

lang

1public class AlertDialogFragment extends DialogFragment { 2 3 @Override 4 public Dialog onCreateDialog(Bundle savedInstanceState){ 5 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 6 builder.setTitle("タイトル"); 7 builder.setMessage("メッセージ"); 8 builder.setPositiveButton(R.string.ok ,null); 9 builder.setNegativeButton(R.string.cancel, null); 10 11 return builder.create(); 12 13 } 14}

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

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

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

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

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

guest

回答1

0

ベストアンサー

ActionBarActivity クラスでメニューボタンを押したあと,最終的にfinish()を呼んでいます.
これが呼び出されると,Activityが終了します.
メニューボタンのswitchでダイアログを表示していますが,ダイアログの表示はあくまで「表示」であって,
そこで処理が止まるわけではないのです.表示したあとbreakでswitchを抜けて,finish()を呼んでしまうのです.
ダイアログはActivityのContextに紐付いているので,Activityが終了すれば当然ダイアログも閉じます.

ListFragmentに遷移したように見えるのは,もともとActionBarActivityがListFragmentを入れていたActivityの上に起動していて,それが終了したために下にあったListFragmentが見えるようになっただけのことです.

戻りたくないのなら,finish()を消せば解決するのではないでしょうか?

投稿2015/03/17 02:58

swordone

総合スコア20649

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

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

kaaa

2015/03/17 03:10

回答ありがとうございます。 finish()を消した所、Dialogは正常に表示されました。 しかし、 case R.id.menu_home: でTopに飛ばしていたものやUPボタンがまったく効かなくなってしまいました。 両方とも共存させたい場合なにか方法はあるのでしょうか?
swordone

2015/03/17 03:17

Topに飛ばすのはft.commit();で完了させるのでは? UPボタンが効かないというのはどういうことでしょうか?
kaaa

2015/03/17 05:30

ft.commit();だと、強制終了になってしまいます。 java.lang.IllegalArgumentException: No view found for id 0x7f0a005b (example..ndrawer:id/container) for fragment Top 多分、そもそも、homeのボタンが、機能しておらず、押すと、finishで最初のフラグメントまで戻っていたのかと思います。 ただ、UPボタンも効かないのは、理由が分からないです。 finishを消せば、dialogは表示されますが、upも R.id.menu_homeも反応しません。(画面遷移しません)
swordone

2015/03/17 06:04

ちょっとあなたか私のどちらかが勘違いしている気がするので確認させてください. 過去の質問から推測するにListFragmentが入っていたActivity(Activity1)と このActionBarActivity(Activity2)は別のActivityと思っていたのですが違いますか? 同じActivityで動かしていると思っているのなら,おそらくR.id.containerは Activity1で使われていて,Activity2では使われていない(と思われる)のだから, 上でおっしゃった例外が発生します. 「最初のフラグメントに戻っていた」というのも,回答で説明しましたが, Activity1の上にActivity2が乗って(見た目Activity1→Activity2の画面遷移に見える), Activity2がfinishして,下に残ったActivity1が現れた(Activity2→Activity1の画面遷移で,これが「最初のフラグメントに戻った」様に見えた?) ということのような気がします. UPボタンはわかりません.そもそもUPボタンの挙動がコードに書かれていませんが,何をするおつもりなのでしょうか? それ以前に「UPボタン」と言うのは,ハードウェアの上(↑)キーでいいんですよね?
kaaa

2015/03/17 06:23

すみません。いろいろと質問や書き込みに間違いがあったかと思います。 申し訳ございません。 書いて頂いたように Activityはそれぞれ別もので、Activity2では使用していないR.id.containerを使用しているから例外が発生しているのだと思います。。。 少し自分で、頑張って解決してみたいと思います。 いろいろ、分かりにくい質問をしてしまい申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問