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 } }
Partager