###dialogflagmentからではactivityのsoundpoolは、鳴らせない?
注*解決方法はすでに見つかっているので、どうしても解決して欲しいというわけではない。
不具合の理由が知りたいだけなので、もしお暇があれば教えていただきたいという感じです。
私は、dialogを作ったときいちいちAudioAttributes.Builder()
,SoundPool.Builder()
とload()
やっていくのが面倒なので、activityで読み込んだsoundpool
を使おうとしました。
流れとコードは以下の通りです。
流れ
1activity
のダイアログ表示ボタンを押す。
2ダイアログ表示
3ダイアログの戻るボタンにView.OnclickListener
を継承したLogButtonClickListener
をつける。
4ダイアログの戻るボタンが押されたときLogButtonClickListener
を通して、押されたView
を把握。押されたView
が戻るボタンだったとき、そのView
をactivityのonClick(v:View)
メソッドに渡す。
5activityのonClick(v:View)
はそれが戻るボタンだったらsoundpool
を鳴らす。
6dialogのdismiss
でdialogを消す。
kotlin
1//dialogを表示するactivity 2class StoryActivity : FragmentActivity(),View.OnClickListener { 3 //dialogで使われるメソッド。渡されるViewが戻るボタンの場合、つまりR.id.button_log_backの 4 //場合、音を鳴らす。 5 override fun onClick(v: View?) { 6 when(v){ 7 findViewById<Button>(R.id.button_log_back)->{ 8 soundPool!!.play(soundBack, 1.0f, 1.0f, 0, 0, 1f) 9 } 10 } 11 } 12 //省略 13}
kotlin
1 2class LogFragment : DialogFragment() { 3 //戻るボタンにつけるリスナを定義。 4 //渡されるViewがR.id.button_log_backの場合、onclickにViewを渡す。 5 inner class LogButtonClickListener:View.OnClickListener{ 6 override fun onClick(v: View?) { 7 when(v){ 8 dialog.findViewById<Button>(R.id.button_log_back)->{ 9 val a =activity 10 if (a is View.OnClickListener){ 11 a.onClick(v)//ここで鳴るはずなのに・・・ 12 dismiss() 13 } 14 } 15 16 } 17 } 18 } 19 //省略 20 override fun onActivityCreated(savedInstanceState: Bundle?) { 21 //上で定義したリスナをつける。 22 dialog.findViewById<Button>(R.id.button_log_back).setOnClickListener(LogButtonClickListener()) 23 } 24
これで戻るボタンを押すとdismiss
はされるのですが、音は鳴りませんでした。(普通にactivityで鳴らす分には、鳴ることは確認済み)
とまあ、面倒を避けようとして逆に面倒なことになってしまい、はっきりいって大失敗しました。
しかしかなり長い時間をかけて考えたので、せっかくだから鳴らない原因を知りたいと思いました。
これはなぜ鳴らないのでしょうか?
また、activityのsoundpoolを使うというのは、やはりよろしくないアプローチなのでしょうか?
ご暇があれば、ぜひ教えていただいたきたいと思います・・・よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/18 06:06
2019/01/18 06:27
2019/01/18 06:49