Android рдореЗрдВ рд╕рдВрд╡рд╛рдж рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдкрд░ рдПрдХ рддрд╛рдЬрд╝рд╛ рдирдЬрд╝рд░


рдЪрд┐рддреНрд░ рдкрд╛рдардХ рдХреЗ рдкрд╣рд▓реЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрд╡рд╛рдж рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдЬреИрд╕реЗ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдиреЗрдЬрд░ рдЗрд╕реА рддрд░рд╣ рд╕реЛрдЪрддрд╛ рд╣реИ: "рдпрд╣рд╛рдБ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд╣рдорд╛рд░рд╛ рд╡рд╛рд╕ 5 рдорд┐рдирдЯ рдореЗрдВ рдХрд░реЗрдЧрд╛ред" рдмреЗрд╢рдХ, рдореИрдВ рдЕрддрд┐рд╢рдпреЛрдХреНрддрд┐ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЙрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИред рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рд╣рдо рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред


рдЗрд╕рд▓рд┐рдП, 2019 рдпрд╛рд░реНрдб рдореЗрдВ рдерд╛, рдФрд░ рд╣рдо рдЕрднреА рднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХреИрд╕реЗ рд╕рдВрд╡рд╛рджреЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рджрд┐рдЦрд╛рдирд╛ рд╣реИ ред


рдЖрдЗрдП рдЗрд╕реЗ рдХреНрд░рдо рдореЗрдВ рдХрд░реЗрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ:


рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рда рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рд╕рдВрд╡рд╛рдж рджрд┐рдЦрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдмрдЯрди "рдкреБрд╖реНрдЯрд┐ / рд░рджреНрдж рдХрд░реЗрдВ"ред "рдкреБрд╖реНрдЯрд┐" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ - "рд░рджреНрдж рдХрд░реЗрдВ" рдмрдЯрди рджреНрд╡рд╛рд░рд╛ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрдВ - рд╕рдВрд╡рд╛рдж рдмрдВрдж рдХрд░реЗрдВред

рдорд╛рдереЗ рдХрд╛ рдШреЛрд▓


рдореИрдВ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХрдирд┐рд╖реНрда рдХрд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдирд╣реАрдВ рд╣реИ рдЬрдм рдореИрдВ рдЧрд▓рддрдлрд╣рдореА рдореЗрдВ рдЖрдпрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк AlertDialog рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:


AlertDialog.Builder(this) .setMessage("Please, confirm the action") .setPositiveButton("Confirm") { dialog, which -> // handle click } .setNegativeButton("Cancel", null) .create() .show() 

рдиреМрд╕рд┐рдЦрд┐рдП рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рд╣рдЬ рд╣реИред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рддрд░реАрдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рд╣реИред рдиреАрд▓реЗ рд░рдВрдЧ рдореЗрдВ рд╕реЗ, рд╣рдореЗрдВ рдПрдХ рдореЗрдореЛрд░реА рд░рд┐рд╕рд╛рд╡ рдорд┐рд▓рддрд╛ рд╣реИ, рдмрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЪрд╛рд▓реВ рдХрд░реЗрдВ, рдФрд░ рдЖрдкрдХреЛ рд▓реЙрдЧ рдореЗрдВ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:


рд╕реНрдЯреИрдХрдЯреНрд░реЗрд╕
 E/WindowManager: android.view.WindowLeaked: Activity com.example.testdialog.MainActivity has leaked window DecorView@71b5789[MainActivity] that was originally added here at android.view.ViewRootImpl.<init>(ViewRootImpl.java:511) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:346) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93) at android.app.Dialog.show(Dialog.java:329) at com.example.testdialog.MainActivity.onCreate(MainActivity.kt:27) at android.app.Activity.performCreate(Activity.java:7144) at android.app.Activity.performCreate(Activity.java:7135) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2931) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6718) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 

Stackoverflow рдкрд░, рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╕рд╡рд╛рд▓ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдпрд╛ рддреЛ рд╕рдВрд╡рд╛рдж рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдпрд╛ рд╕рдХреНрд░рд┐рдпрдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕рдВрд╡рд╛рдж рдХреЛ рдмрдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред


рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдСрдирдкреЙрдЬрд╝ рдпрд╛ рдСрдирдбреЗрд╕реНрдЯреНрд░реЛ рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдбрд╛рдпрд▓реЙрдЧ рдХреЛ рдЦрд╛рд░рд┐рдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдЙрддреНрддрд░ рдореЗрдВ рд╕рд▓рд╛рд╣ рджреА рдЧрдИ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдареАрдХ рд╡реИрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдЬреИрд╕рд╛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдВрд╡рд╛рдж рдареАрдХ рд╣реЛ рдЬрд╛рдПред


рдмрд╛рд╣рд░ рдХрд╛ рд░рд╛рд╕реНрддрд╛


рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдЯреБрдХрдбрд╝реЗ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдбрд╛рдпрд▓рдбреЙрдЧ рдХреЛ рдХреЙрд▓ рд╢реЛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ рд╕рдХреНрд░рд┐рдпрдг рд╡рд┐рдзрд┐ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕рдВрд╡рд╛рдж рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддреА рд╣реИ рдФрд░ рдПрдХ рдореЛрдбрд╝ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреА рд╣реИред рдбрд╛рдпрд▓реЙрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдСрдирдХреНрд░рд┐рдПрдЯрдбрд┐рдпрд▓ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдкрдбрд╝рд╛:


 public class MainActivity extends Activity { private static final int CONFIRMATION_DIALOG_ID = 1; // ... @Override protected Dialog onCreateDialog(int id, Bundle args) { if (id == CONFIRMATION_DIALOG_ID) { return new AlertDialog.Builder(this) .setMessage("Please, confirm the action") .setPositiveButton("Confirm", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // handle click } }) .create(); } else { return super.onCreateDialog(id, args); } } } 

рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рд╕рдВрд╡рд╛рдж рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдмрдВрдбрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реИред рдФрд░ рд╣рдо рдЕрднреА рднреА "рд▓реАрдХ рд╣реБрдИ рдЦрд┐рдбрд╝рдХреА" рд╕рдорд╕реНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╣рдо рдЧрддрд┐рд╡рд┐рдзрд┐ рдкрд░ рдСрдирдбрд╕реНрдЯреНрд░реЛ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдПрдХ рд╕рдВрд╡рд╛рдж рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рдж рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрддреА рд╣реИ, рдЬрдм рдЖрдкрдХреЛ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рдж рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЙрд╕ рдкрд▓ рдореЗрдВ рдЧрддрд┐рд╡рд┐рдзрд┐ рдпрд╛ рдЯреБрдХрдбрд╝рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдПрдорд╡реА * рдкреИрдЯрд░реНрди рдЖрдИрдУрдПрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдореБрдХрд╛рдмрд▓реЗ рдПрдВрдбреНрд░реЙрдЗрдб рд╕рдореБрджрд╛рдп рдореЗрдВ рдЕрдзрд┐рдХ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИрдВред


рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рд╡рд┐рдзрд┐


рдПрдВрдбреНрд░реЙрдЗрдб рд╣рдиреАрдХреЙрдореНрдм рдореЗрдВ рдлреНрд░реЗрдЧрдореЗрдВрдЯ рджрд┐рдЦрд╛рдИ рджрд┐рдП, рдФрд░ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рдкрджрд╛рд╡рдирдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдкрджрд╛рд╡рдирдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдирд╣реАрдВ, AlertDialog рдкреБрд░рд╛рдиреА рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдЧрд▓рдд рд╣реИрдВред рдмрд╕ рдЕрдм DialogFragment рд╣реИ , рдЬреЛ рдбрд╛рдпрд▓реЙрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред


28 рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рдж рд╕реЗ рдореВрд▓ рд╕реНрдирд┐рдкреЗрдЯ рднреА рд╣рдЯрд╛рдП рдЧрдП рд╣реИрдВред рдЕрдм рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд╕рдорд░реНрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА (AndroidX) рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдХрд╛рдо рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:


  1. рдкрд╣рд▓реЗ рдЖрдкрдХреЛ DialogFragment рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ onCreateDialog рдкрджреНрдзрддрд┐ рдореЗрдВ рдПрдХ рдбрд╛рдпрд▓реЙрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
  2. рд╕рдВрд╡рд╛рдж рдИрд╡реЗрдВрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ рдФрд░ рд╢реНрд░реЛрддрд╛ рдХреЛ onAttach рд╡рд┐рдзрд┐ рдореЗрдВ рддреБрд░рдВрдд рд▓рд┐рдЦреЗрдВред
  3. рдПрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдпрд╛ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдПрдХ рд╕рдВрд╡рд╛рдж рдШрдЯрдирд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░реЗрдВред

рдпрджрд┐ рдкрд╛рдардХ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ рд╢реНрд░реЛрддрд╛ рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ

рд╕рдВрд╡рд╛рдж рдЯреБрдХрдбрд╝рд╛ рдХреЛрдб:


 class ConfirmationDialogFragment : DialogFragment() { interface ConfirmationListener { fun confirmButtonClicked() fun cancelButtonClicked() } private lateinit var listener: ConfirmationListener override fun onAttach(context: Context?) { super.onAttach(context) try { // Instantiate the ConfirmationListener so we can send events to the host listener = activity as ConfirmationListener } catch (e: ClassCastException) { // The activity doesn't implement the interface, throw exception throw ClassCastException(activity.toString() + " must implement ConfirmationListener") } } override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { return AlertDialog.Builder(context!!) .setMessage("Please, confirm the action") .setPositiveButton("Confirm") { _, _ -> listener.confirmButtonClicked() } .setNegativeButton("Cancel") { _, _ -> listener.cancelButtonClicked() } .create() } } 

рд╕рдХреНрд░рд┐рдпрдг рдХреЛрдб:


 class MainActivity : AppCompatActivity(), ConfirmationListener { private fun showConfirmationDialog() { ConfirmationDialogFragment() .show(supportFragmentManager, "ConfirmationDialogFragmentTag") } override fun confirmButtonClicked() { // handle click } override fun cancelButtonClicked() { // handle click } } 

рдкрд░реНрдпрд╛рдкреНрдд рдХреЛрдб рдирд┐рдХрд▓рд╛, рд╣реИ рдирд╛?


рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдорд╡реАрдкреА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЙрд▓ рдХреЛ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ NewInstance рдбрд╛рдпрд▓реЙрдЧ рдмрдирд╛рдиреЗ рдФрд░ рд╕реНрдереИрддрд┐рдХ рддрд░реНрдХреЛрдВ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдзрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдЬреЛ рд╕рднреА рдЕрдкреЗрдХреНрд╖рд┐рдд рдереЗред


рдФрд░ рдпрд╣ рд╕рдм рдЗрддрдирд╛ рд╣реИ рдХрд┐ рд╕рдВрд╡рд╛рдж рд╕рдордп рдореЗрдВ рдЫрд┐рдк рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдмрд╣рд╛рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕реНрдЯреИрдХрдУрд╡рд░рдлрд╝реНрд▓реЛ рдкрд░ рдРрд╕реЗ рд╕рд╡рд╛рд▓ рдЙрдарддреЗ рд╣реИрдВ: рдПрдХ рдФрд░ рджреЛ ред


рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдвреВрдБрдврдирд╛


рдорд╛рдорд▓реЛрдВ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рд╣рдорд╛рд░реЗ рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рдереА, рдФрд░ рд╣рдо рд╕рдВрд╡рд╛рджреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╛рд╕реНрддрд╛ рддрд▓рд╛рд╢рдиреЗ рд▓рдЧреЗред рдПрдХ рднрд╛рд╡рдирд╛ рдереА рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓рдЧрднрдЧ рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдХреА рддрд░рд╣ред


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╣рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рд╣реИ:


  • рдХреНрдпрд╛ рдореБрдЭреЗ рдЖрд╡реЗрджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдорд╛рд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдВрд╡рд╛рдж рдХреЛ рдмрдЪрд╛рдиреЗ рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
    рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЬрдм рдЖрдкрдХреЛ рдПрдХ рд╕рд░рд▓ рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдиреЗ рдпрд╛ рдХреБрдЫ рдкреВрдЫрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдзреНрдпрд╛рди рдЦреЛ рдЬрд╛рдиреЗ рддрдХ рдРрд╕рд╛ рд╕рдВрд╡рд╛рдж рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рдпрджрд┐ рдЖрдк рдЖрд╡реЗрджрди рдореЗрдВ рд▓рдВрдмреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рдпреЛрдЬрд┐рдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд╕рд╛рде рд╕рдВрджрд░реНрдн рдЦреЛ рджреЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдШреБрдорд╛рд╡реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдФрд░ рд╕рдВрд╡рд╛рдж рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдЕрдЬреАрдм рдЖрдВрджреЛрд▓рди рд╕реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрд╕ рд╕рдВрджреЗрд╢ рдХреЛ рдЦреЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рд╣реА рдЦреЛрд▓рд╛ рдЧрдпрд╛ рд╣реИред
  • DialogFragment рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рд╕рд╛рджрдЧреА рдЦреЛ рдЬрд╛рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдХ рдЖрд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЯреБрдХрдбрд╝реЗ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдФрд░ рдбрд╛рдпрд▓реЙрдЧ рдХрд╛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡реНрдпреВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЙрд╕реЗ рдлрд┐рд░ рд╕реЗ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд╛рдпрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╡реНрдпреВ рдХреЗ рдорд░рдиреЗ рдкрд░ рдЙрд╕реЗ рдЫрд┐рдкрд╛ рджреЗрдирд╛ рд╣реЛрдЧрд╛ред
  • рд╕рднреА рдХреЛ рдПрдХ рдЯреАрдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╡рд╛рдж рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдПрдорд╡реАрдкреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд░рд╛рдЬреНрдп рдХреА рдмрд╛рдж рдХреА рдмрд╣рд╛рд▓реА рдХрд╛ рдХрд╛рд░реНрдп FragmentManager рджреНрд╡рд╛рд░рд╛ рдЧреНрд░рд╣рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рддрдЪреАрдд рдХреЛ рдПрдХ рд░рд╛рдЬреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреАрдПрдо рдпрд╛ рдПрдорд╡реАрд╡реАрдПрдо рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
  • рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрдм рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╡рд╛рджреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдЙрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рддреЛрдбрд╝рдирд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕рдВрд╡рд╛рдж рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдирд╛рдУрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдзрд╛рд░рд╛ рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ рд╣реИред рдЬрдм рдЖрдк рдХрдИ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ PresentationModel / ViewModel рдкрдХреНрд╖ рдкрд░ рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рд╣рдордиреЗ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕рдВрд╡рд╛рдж рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд╕рд╛рде рдЖрдП, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЕрдкрдиреЗ рдЖрд░рдПрдХреНрд╕рдкреАрдПрдо рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ (рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рд╣реИ)ред


рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрд▓рдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред "рд░рд╛рдЬреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╡рд╛рдж" рдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реЛрдХрд░, рдЖрдк рдЯреНрд░реЗрдВрдбреА ViewModel рдФрд░ LiveData рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рдЕрдзрд┐рдХрд╛рд░ рдкрд╛рдардХ рдкрд░ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛, рдФрд░ рдлрд┐рд░ рд╣рдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред


рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╡рд┐рдзрд┐


рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЖрд░рдПрдХреНрд╕рдкреАрдПрдо рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдп рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдкреНрд░рдореБрдЦ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж:


  • PresentationModel - рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпреВрдЖрдИ-рд▓реЙрдЬрд┐рдХ рд╣реЛрддрд╛ рд╣реИ, рдЬреАрд╡рд┐рдд рд░рд╣рддрд╛ рд╣реИред
  • рд░рд╛рдЬреНрдп рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд░рд╛рдЬреНрдп рд╣реИ ред рдЖрдк рдЗрд╕реЗ BehaviorRelay рдкрд░ рдПрдХ рдЖрд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВред
  • рдПрдХреНрд╢рди - рдкрдмреНрд▓рд┐рд╢рд░реИрд▓ рдкрд░ рдПрдХ рдЖрд╡рд░рдг, рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╡реНрдпреВ рд╕реЗ рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рдирдореЙрдбрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
  • рд╕реНрдЯреЗрдЯ рдФрд░ рдПрдХреНрд╢рди рдореЗрдВ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рдФрд░ рдЙрдкрднреЛрдХреНрддрд╛ рд╣реИрдВред

рд╕рдВрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП DialogControl рд╡рд░реНрдЧ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЗрд╕рдХреЗ рджреЛ рдорд╛рдирджрдВрдб рд╣реИрдВ: рдкрд╣рд▓рд╛ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕реЗ рд╕рдВрд╡рд╛рдж рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рджреВрд╕рд░рд╛ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдПред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдпреВрдирд┐рдЯ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджреЗрд╢ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред


DialogControl рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЗ рд╣реИрдВ:


  • show(data: T) - рдмрд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджреЗрд╢ рджреЗрддрд╛ рд╣реИред
  • showForResult(data: T): Maybe<R> - рдПрдХ рдбрд╛рдпрд▓реЙрдЧ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдо рдЦреЛрд▓рддрд╛ рд╣реИред
  • sendResult(result: R) - рдкрд░рд┐рдгрд╛рдо рднреЗрдЬрддрд╛ рд╣реИ, рд╡реНрдпреВ рд╕рд╛рдЗрдб рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • dismiss() - рдмрд╕ рд╕рдВрд╡рд╛рдж рдЫреБрдкрд╛рддрд╛ рд╣реИред

DialogControl рд░рд╛рдЬреНрдп рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ - рдХреНрдпрд╛ рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рд╕рдВрд╡рд╛рдж рд╣реИ рдпрд╛ рдирд╣реАрдВ (рдкреНрд░рджрд░реНрд╢рд┐рдд / рдЕрдиреБрдкрд╕реНрдерд┐рдд)ред рдпрд╣ рдХреНрд▓рд╛рд╕ рдХреЛрдб рдореЗрдВ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:


 class DialogControl<T, R> internal constructor(pm: PresentationModel) { val displayed = pm.State<Display>(Absent) private val result = pm.Action<R>() sealed class Display { data class Displayed<T>(val data: T) : Display() object Absent : Display() } // ... } 

рдПрдХ рд╕рд░рд▓ рдкреНрд░рд╕реНрддреБрддрд┐ рдмрдирд╛рдПрдВ:


 class SamplePresentationModel : PresentationModel() { enum class ConfirmationDialogResult { CONFIRMED, CANCELED } //        enum    val confirmationDialog = dialogControl<Unit, ConfirmationDialogResult>() val buttonClicks = Action<Unit>() override fun onCreate() { super.onCreate() buttonClicks.observable .switchMapMaybe { //           confirmationDialog.showForResult(Unit) .filter { it == ConfirmationDialogResult.CONFIRMED } } .subscribe { //   } .untilDestroy() } } 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрдХ рд╣реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг, рдкреБрд╖реНрдЯрд┐ рдкреБрд╖реНрдЯрд┐рдХрд░рдг рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдпрд╣ рдЖрдкрдХреЛ рдХреЛрдб рдХреЛ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдХрдИ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рддрд░реНрдХ рдХреЛ рддрд┐рддрд░ рдмрд┐рддрд░ рдирд╣реАрдВ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред


рдЕрдЧрд▓рд╛, рд╣рдо рдмрд╕ рдбрд╛рдпрд▓реЙрдЧрдХрдВрдЯреНрд░реЛрд▓ рдХреЛ рдмрд╛рдЗрдВрдбреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реНрдпреВ рдореЗрдВ рдмрд╛рдБрдзрддреЗ рд╣реИрдВред
рд╣рдо рд╕рд╛рдорд╛рдиреНрдп AlertDialog рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ sendResult рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рдгрд╛рдо рднреЗрдЬрддреЗ рд╣реИрдВ:


 class SampleActivity : PmSupportActivity<SamplePresentationModel>() { override fun providePresentationModel() = SamplePresentationModel() //     View  PresentationModel override fun onBindPresentationModel(pm: SamplePresentationModel) { pm.confirmationDialog bindTo { data, dialogControl -> AlertDialog.Builder(this@SampleActivity) .setMessage("Please, confirm the action") .setPositiveButton("Confirm") { _, _ -> dialogControl.sendResult(CONFIRMED) } .setNegativeButton("Cancel") { _, _ -> dialogControl.sendResult(CANCELED) } .create() } button.clicks() bindTo pm.buttonClicks } } 

рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ, рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдРрд╕рд╛ рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИ:


  1. рд╣рдо рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХреНрд╢рди "рдмрдЯрди рдХреНрд▓рд┐рдХреНрд╕" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдШрдЯрдирд╛ PresentationModel рдореЗрдВ рдорд┐рд▓рддреА рд╣реИред
  2. рдЗрд╕ рдИрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╡рд╛рдж рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ showForResult рдкрд░ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВред
  3. рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдбрд╛рдпрд▓реЙрдЧрдХреЙрдиреНрдЯреНрд░реЛрд▓ рдореЗрдВ рд░рд╛рдЬреНрдп рдПрдмреНрд╕реЗрдВрдЯ рд╕реЗ рдбрд┐рд╕реНрдкреНрд▓реЗ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
  4. рдЬрдм рдкреНрд░рджрд░реНрд╢рд┐рдд рдИрд╡реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо рд▓рдВрдмреЛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдореЗрдВ рдкрд╛рд╕ рд╣реБрдП рд▓рдВрдмреЛ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдПрдХ рдбрд╛рдпрд▓реЙрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  5. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреБрд╖реНрдЯрд┐рдХрд░рдг рдмрдЯрди рджрдмрд╛рддрд╛ рд╣реИ, рд╢реНрд░реЛрддрд╛ рдЖрдЧ рд▓рдЧрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреНрд▓рд┐рдХ рдХрд╛ рдкрд░рд┐рдгрд╛рдо SendResult рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ DialogControl рдХреЛ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  6. рдЗрд╕рдХреЗ рдмрд╛рдж, рдкрд░рд┐рдгрд╛рдо рдЖрдВрддрд░рд┐рдХ рдХреНрд░рд┐рдпрд╛ "рдкрд░рд┐рдгрд╛рдо" рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреА рд╕реНрдерд┐рддрд┐ред
  7. рдЬрдм рдПрдХ рдЕрдиреБрдкрд╕реНрдерд┐рдд рдШрдЯрдирд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, рддреЛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╡рд╛рдж рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
  8. рдПрдХреНрд╢рди "рд░рд┐рдЬрд▓реНрдЯ" рдХреА рдШрдЯрдирд╛ рдЙрд╕ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЖрддреА рд╣реИ, рдЬрд┐рд╕реЗ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рд╢реЛрдлреЛрд░.рд╕реНрдХреВрд▓ рдореЗрдВ рдЦреЛрд▓рд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЗрд╕реЗ рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рдирдореЙрдбрд▓ рдореЗрдВ рдЪреЗрди рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рджреГрд╢реНрдп рддрдм рднреА рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм View PresentationModel рд╕реЗ рдЕрдЫреВрддрд╛ рд░рд╣рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕реНрдерд┐рддрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рд░рд╣рддреА рд╣реИред рдпрд╣ рдЕрдЧрд▓реЗ рдмрдВрдзрди рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╕рдВрд╡рд╛рдж рдмрд╣рд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, DialogFragment рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИред рдЬрдм рд╕рдВрд╡рд╛рдж PresentationModel рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЬрдм рджреГрд╢реНрдп рдЕрдЫреВрддрд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕рдВрд╡рд╛рдж рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд░рд╛рдЬреНрдп DialogControl рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ PresentationModel рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдШреБрдорд╛рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдВрд╡рд╛рдж рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рд╕рдВрд╡рд╛рдж рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд┐рдЦреЗрдВ


рд╣рдордиреЗ рд╕рдВрд╡рд╛рдж рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА рд╣реИред рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдкрд╣рд▓реЗ рддрд░реАрдХреЗ рд╕реЗ рджрд┐рдЦрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрдкрд╕реЗ рд╡рд┐рдирддреА рдХрд░рддрд╛ рд╣реВрдВ, рдЕрдм рдРрд╕рд╛ рди рдХрд░реЗрдВред рдПрдорд╡реАрдкреА рдХреЗ рдкреНрд░реЗрдорд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдирд╣реАрдВ рдмрдЪрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рдкреИрдЯрд░реНрди рдХреА рдЕрдкрд░рд┐рдкрдХреНрд╡рддрд╛ рдХреА рдкреНрд░рд╡реГрддреНрддрд┐ рдЕрдиреНрдпрдерд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИред рдЦреИрд░, рдореИрдВ RxJava рдкреНрд░рд╢рдВрд╕рдХреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╡рд┐рдзрд┐ рдФрд░ рд╣рдорд╛рд░реА RxPM рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ ред

Source: https://habr.com/ru/post/hi440284/


All Articles