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

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

新規登録して質問してみよう
ただいま回答率
85.35%
コールバック

コールバックは他のコードに引数として渡されるコードのことを指します。

ダイアログ

ユーザーにウィンドウやボックス等の形で個別で表示されるフォームであり、ユーザーに判断を促す目的で表示される。ユーザーが見逃す事のないよう、操作中のフォーム上にポップアップして表示される。

Android Studio

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

2650閲覧

ダイアログフラグメントからのコールバック(Navigation)

abc1222

総合スコア24

コールバック

コールバックは他のコードに引数として渡されるコードのことを指します。

ダイアログ

ユーザーにウィンドウやボックス等の形で個別で表示されるフォームであり、ユーザーに判断を促す目的で表示される。ユーザーが見逃す事のないよう、操作中のフォーム上にポップアップして表示される。

Android Studio

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2021/04/05 08:07

ダイアログフラグメントで表示しているボタンをクリックした場合に、呼び出し元のfragmentへ値を引き継ぎたいと思っています。
色々調べてダイアログフラグメントのコールバックを利用することまでは分かったのですが、AndroidXのNavigationを利用しており、同じような事例を説明しているサイトが見つけられなかったため、使い方が分かりません。
どのように実装すれば良いのでしょうか。

Kotlin

1class AFragment : Fragment() { 2 3 //省略 4 5 override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 6 super.onViewCreated(view, savedInstanceState) 7 8 binding.button0.setOnClickListener { 9 //ADialogを表示 10 val action = AFragmentDirections.actionGlobalDialogA() 11 findNavController().navigate(action) 12 } 13 } 14   15 //ADialogから文字列を受け取って起動したい動き 16 func kansu(string: String) { 17 18 } 19}

Kotlin

1class ADialog: DialogFragment() { 2 3 private lateinit var binding: DialogABinding 4 5 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { 6 7 binding = DataBindingUtil.inflate(layoutInflater, R.layout.dialog_a, null, false) 8 binding.lifecycleOwner = this 9 val dpLayout = binding.root 10 11 binding.button1.setOnClickListener { 12 //文字列をAFragmentに渡して、ADialogは閉じ、AFragmentのkansu()を起動したい 13 val test1 = binding.editText1.text 14 } 15 16 binding.button2.setOnClickListener { 17     //文字列をAFragmentに渡して、ADialogは閉じ、AFragmentのkansu()を起動したい 18 val test2 = binding.editText2.text 19 } 20 21 return AlertDialog.Builder(requireContext()) 22 .setTitle("テスト") 23 .setView(dpLayout) 24 .setNegativeButton("閉じる", null) 25 .create() 26}

やってみたこと

下記を参考に色々触ってみたのですが、分かりませんでした。
https://qiita.com/outerlet/items/4d2a20e0049f9d023cfb#ダイアログ押下時のコールバックを受け取る

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

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

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

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

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

guest

回答1

0

ベストアンサー

参考記事のコールバックはこんなふうに実装することが想定されてます。

Kotlin

1class AFragment: Fragment(), ADialog.ADialogListener { 2 3 // 省略 4 5 // ADialogから文字列を受け取って起動したい動き 6 // (interface のメソッドを実装するので override をつける) 7 override fun kansu(string: String) { 8 9 } 10}

Kotlin

1class ADialog: DialogFragment() { 2 3 // ボタンが押されたときの処理を記述するためのインターフェイス 4 interface ADialogListener { 5 fun kansu(string: String) 6 } 7 8 // 省略 9 10 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { 11 12 // 省略 13 14 binding.button1.setOnClickListener { 15 //文字列をAFragmentに渡して、ADialogは閉じ、AFragmentのkansu()を起動したい 16 val test1 = binding.editText1.text 17 18 // 呼び出し元 fragment の kansu() を起動 19 val listener = parentFragmentManager.fragments.first() as? ADialogListener 20 listener?.kansu(test1.toString()) 21 22 // ダイアログを閉じる 23 dismiss() 24 // または、findNavController().navigateUp() 25 } 26 27 // 以下略

投稿2021/04/05 22:02

hoshi-takanori

総合スコア7901

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

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

abc1222

2021/04/08 03:09

ありがとうございます! 記載いただいた内容で無事目的の動きを達成できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問