J'ai un Fragment Principal; l'utilisateur clique sur un bouton, de cet action, un DialogFragment s'ouvre, lorsqu'il clic sur le bouton du DialogFragment, j'envoie une information à mon Fragment ("test communication"), voilà comment je procède (deux méthodes différentes, laquelle est la mieux ?)

La première (Fastidieuse) : j'utilise un BroadcastReceiver :

FragmentPrincipal.kt

Code kotlin : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class FragmentPrincipal(private val mContext: Context) : Fragment() {
 
    //l'EditText dans lequel je vais écrire l'info reçue de mon DialogFragment
    private var EditText_infos: EditText? = null
 
    private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent) {
            if ("recuperer_infos" == intent.action == true) {
                EditText_infos?.setText(intent.getStringExtra("infos"))
            }
        }
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        LocalBroadcastManager.getInstance(mContext)
            .registerReceiver(broadcastReceiver, IntentFilter("recuperer_infos"))
    }
    override fun onDestroy() {
        super.onDestroy()
        LocalBroadcastManager.getInstance(mContext).unregisterReceiver(broadcastReceiver)
    }
 
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
 
        val view = inflater.inflate(R.layout.fragment_principal, container, false)
 
        EditText_infos = view.findViewById(R.id.EditText_infos)
        val Button_lancer_dialog = view.findViewById<Button>(R.id.Button_lancer_dialog)
 
        //ouvrir le dialog fragment
        Button_lancer_dialog.setOnClickListener {
 
            var dialog = FragmentDialog(mContext)
            dialog.show((mContext as AppCompatActivity).supportFragmentManager, "un_tag")
 
        }
 
        return view
    }
}


FragmentDialog.kt

Code kotlin : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class FragmentDialog(private val mContext: Context) : DialogFragment() {
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val view = inflater.inflate(R.layout.fragment_dialog, container, false)
 
        Button_envoyer_infos.setOnClickListener {
            val infos= "test communication"
 
            val intent = Intent("recuperer_infos")
            intent.putExtra("infos", infos)
            LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent)
 
            dismiss()
        }
 
        return view
    }
}



La seconde (plus simple): j'utilise une fonction (envoyerInfos()) créée dans mon FragmentPrincipal, que j'appelle depuis le FragmentDialog :

FragmentPrincipal.kt

Code kotlin : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class FragmentPrincipal(private val mContext: Context) : Fragment() {
 
    //l'EditText dans lequel je vais écrire l'info reçue de mon DialogFragment
    private var EditText_infos: EditText? = null
 
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
 
        val view = inflater.inflate(R.layout.fragment_principal, container, false)
 
        EditText_infos = view.findViewById(R.id.EditText_infos)
        val Button_lancer_dialog = view.findViewById<Button>(R.id.Button_lancer_dialog)
 
        //ouvrir le dialog fragment
        Button_lancer_dialog.setOnClickListener {
 
            var dialog = FragmentDialog(this)
            dialog.show((mContext as AppCompatActivity).supportFragmentManager, "un_tag")
 
        }
 
        return view
    }
 
    fun envoyerInfos(infos: String){
        EditText_infos?.setText(infos)
    }
 
}


FragmentDialog.kt

Code kotlin : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class FragmentDialog(private val FragmentPrincipal: FragmentPrincipal) : DialogFragment() {
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val view = inflater.inflate(R.layout.fragment_dialog, container, false)
 
        Button_envoyer_infos.setOnClickListener {
            val infos= "test communication"
 
            FragmentPrincipal.envoyerInfos(infos)
 
            dismiss()
        }
 
        return view
    }
}