рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдмреИрдХ-рдбреНрд░рд┐рд╡реНрдб рдпреВрдЖрдИ

рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдЕрдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рд╕реЗ рд╡рд┐рдЧреЗрдЯреНрд╕, рдЙрдирдХреА рдЕрд╡рдзрд╛рд░рдгрд╛, рдлрд╛рдпрджреЗ рдФрд░ рдЕрдВрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред



рдмреИрдХрдПрдВрдб-рд╕рдВрдЪрд╛рд▓рд┐рдд рдпреВрдЖрдИ - рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬреЛ рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпреВрдЖрдИ-рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдкреАрдЖрдИ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдШрдЯрдХреЛрдВ рдФрд░ рдЙрдирдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЖрд╡реЗрджрди рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рдЧреБрдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдХреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдШрдЯрдХреЛрдВ рдХреЗ рддрд░реНрдХ рдХреЛ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╡реЗ рдПрдХ рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдореЗрдВ рдмрд╛рдХреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рддрд░реНрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдмреИрдВрдХрд┐рдВрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрдкрдХреЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдЕрдиреБрд╡рд╛рдж рдлрд╝реЙрд░реНрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрд╡реЗрджрди рдореЗрдВ рдлрд╛рд░реНрдо рдХреА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдЙрд╕рдореЗрдВ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдирд╣реАрдВ рдкрддрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП,рдпрд╣ рддрд░реАрдХрд╛ рдмреИрд╕рд╛рдЦреА рдХреЗ рдмрд┐рдирд╛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд▓рдЪреАрд▓рд╛рдкрди рдЬреЛрдбрд╝рддрд╛ рд╣реИ: рд╕рд░реНрд╡рд░ рдХреА рдУрд░ рд╕реЗ, рдЖрдк рдХрд┐рд╕реА рднреА рд╕рдордп рдлрд╝реЙрд░реНрдо рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддреИрдпрд╛рд░ рд╣реЛрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг




рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдШрдЯрдХ рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рд╣реИрдВ:

  1. рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдЦрд╛рддреЛрдВ рдХреА рд╕реВрдЪреА;
  2. рдЕрдиреБрд╡рд╛рдж рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд╛рдо;
  3. рдлрд╝реЛрди рдирдВрдмрд░ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб (рдЗрд╕рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХреЗ рд▓рд┐рдП рдорд╛рд╕реНрдХ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдЗрдХрди рд╣реЛрддрд╛ рд╣реИ);
  4. рд╣рд╕реНрддрд╛рдВрддрд░рдг рд░рд╛рд╢рд┐ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдбред

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



рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рд╕реНрдХ рдФрд░ рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдо рд╣реИрдВ; рдмрдЯрди рдореЗрдВ рдмреВрдЯ рд╕рдордп рдкрд░ рдЭрд┐рд▓рдорд┐рд▓рд╛рддрд╛ рдПрдиреАрдореЗрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ; рдЪрд╛рд░реНрдЬ-рдСрдл рдЦрд╛рддреЗ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╕рдордп рдПрдиреАрдореЗрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред

рд╕рднреА рдпреВрдЖрдИ рдШрдЯрдХ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ, рдФрд░ рддрд░реНрдХ рдХреЛ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЪрд▓реЛ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдЬреЗрдЯ рдХрд╣рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдЬреЗрдЯ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЕрдкрдирд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рддрд░реНрдХ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИред

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

рд╡рд┐рдЬреЗрдЯ рдЕрд╡рдзрд╛рд░рдгрд╛


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

рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЙрдирдХреЗ рд▓рд╛рднреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реИрдВ:

  • , , ┬л┬╗ , тАФ UI- , .
  • , , .
  • , тАФ : , , .


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

рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдорд╛рдорд▓рд╛ рд╕реНрдерд┐рд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рд╣реИ, рд╕реАрдзреЗ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИред рд╡рд┐рдЬреЗрдЯ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ XML рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдЕрдкрдиреА рдЖрдИрдбреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреВрд▓рдХрд░ (рдЖрдИрдбреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдХ рд╡рд┐рдЬреЗрдЯ рдХрд╛ DI рд╕реНрдХреЛрдк рдмрдиреЗрдЧрд╛)ред

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

рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реНрдерд┐рд░ рдФрд░ рдЧрддрд┐рд╢реАрд▓ рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреЛрдИ рднреА рд╡рд┐рдЬреЗрдЯ рдПрдорд╡реАрдкреА рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд▓рдЧрднрдЧ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╡рд┐рдЬреЗрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 4 рд╡рд░реНрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:

  1. рджреЗрдЦреЗрдВ рд╡рд░реНрдЧ, рдЬрд╣рд╛рдВ рд▓реЗрдЖрдЙрдЯ рд▓реЗрдЖрдЙрдЯ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИ;

    class TextInputFieldWidget @JvmOverloads constructor(
            context: Context,
            attrs: AttributeSet? = null
    ) : CoreFrameLayoutView(context, attrs) {
    @Inject
    lateinit var presenter: TextInputFieldPresenter
    тАж
    init {
         inflate(context, R.layout.view_field_text_input, this)
      }
    }
    

  2. рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ, рдЬрд╣рд╛рдБ рд╡рд┐рдЬреЗрдЯ рдХреЗ рдореВрд▓ рддрд░реНрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

    1. рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рд░реЗрдВрдбрд░ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЯреНрд░рд╛рдВрд╕рдорд┐рдЯ рдХрд░рдирд╛;
    2. рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рдФрд░ рд╡рд┐рдЬреЗрдЯ рдЗрдирдкреБрдЯ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди;

    @PerScreen
    class TextInputFieldPresenter @Inject constructor(
            basePresenterDependency: BasePresenterDependency,
            rxBus: RxBus
    ) : BaseInputFieldPresenter<TextInputFieldWidget>(
           basePresenterDependency, rxBus
    ) {
    private val sm = TextInputFieldScreenModel()
    ...
    }
    

    рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, RxBus рд╡рд░реНрдЧ рдШрдЯрдирд╛рдУрдВ рдХреЛ рднреЗрдЬрдиреЗ рдФрд░ рдЙрдирдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрдмреНрд▓рд┐рд╢рд╕рдмрдЬреЗрдХреНрдЯ рдЖрдзрд╛рд░рд┐рдд рдмрд╕ рд╣реИред
  3. рд╕реНрдХреНрд░реАрди рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ, рдЬрд┐рд╕рдХреА рдорджрдж рд╕реЗ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рджреГрд╢реНрдп рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдкреНрд░рд╕реНрддреБрддрд┐ рдореЙрдбрд▓ рдкреИрдЯрд░реНрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ);

    class TextInputFieldScreenModel : ScreenModel() {
    	val value = String = тАЬтАЭ
    	val hint = String = тАЬтАЭ
    	val errorText = String = тАЬтАЭ
    }
    

  4. DI рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕рдХрд░реНрддрд╛ рд╡рд░реНрдЧ, рдЬрд┐рд╕рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рд╡рд┐рдЬреЗрдЯ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╡рд┐рддрд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдЧреБрдВрдЬрд╛рдЗрд╢ рд╣реЛрддреА рд╣реИ, рдФрд░ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕рдХреЗ рджреГрд╢реНрдп рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

    class TextInputFieldWidgetConfigurator : WidgetScreenConfigurator() {
    	// logic for components injection
    }
    


рд╡рд┐рдЧреЗрдЯреНрд╕ рдФрд░ рд╣рдорд╛рд░реЗ рдкреВрд░реНрдг рд╕реНрдХреНрд░реАрди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдЧрддрд┐рд╡рд┐рдзрд┐, рдЯреБрдХрдбрд╝рд╛) рдХреЗ рдмреАрдЪ рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдХрдИ рдЬреАрд╡рди рдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпрд╛рдБ (onStart, onResume, onPause) рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ onCreate рдкрджреНрдзрддрд┐ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдЬреЗрдЯ рдиреЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдкрдирд╛ рджрд╛рдпрд░рд╛ рдмрдирд╛ рд▓рд┐рдпрд╛ рд╣реИ, рдФрд░ onDetachedFromWindow рд╡рд┐рдзрд┐ рдореЗрдВ рд╕реНрдХреВрдк рдирд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдЬреЗрдЯ рдХреЗ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЛ рдмрд╛рдХреА рд╕реНрдХреНрд░реАрди рдХреЗ рд╕рдорд╛рди рд╣реА рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рддрд░реАрдХреЗ рдорд┐рд▓рддреЗ рд╣реИрдВред рдпреЗ рдШрдЯрдирд╛рдПрдБ рдЕрдкрдиреЗ рдЖрдк рдЬрдирдХ рд╕реЗ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдкрд╣реБрдБрдЪ рдЬрд╛рддреА рд╣реИрдВред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд┐рдЬреЗрдЯ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХрд╛ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдЕрдиреНрдп рд╕реНрдХреНрд░реАрди рдХреЗ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╣реА рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд╣реИред

рдЧрддрд┐рд╢реАрд▓ рд╡рд┐рдЧреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдЪрд▓реЛ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдорд╛рдорд▓реЗ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

  1. рд╕реНрдХреНрд░реАрди рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдореЗрдВ, рдЕрдиреБрд╡рд╛рдж рдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдбреЗрдЯрд╛ рдХреЛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдп рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реНрдХреНрд░реАрди рдХрд╛ рджреГрд╢реНрдп рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдпрд╛ рд╡рд┐рдЬреЗрдЯ рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╣рдо рдХреЗрд╡рд▓ RecyclerView рд░рдЦрдиреЗ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред

    // TransferFormPresenter
    private val sm = TransferFormScreenModel()
    тАж
    private fun loadData() {
    	loadDataDisposable.dispose()
      	loadDataDisposable = subscribe(
                  observerDataForTransfer().io(), 
                  { data -> 
                          sm.data = data
                          view.render(sm)
                  },
                  { error -> /* error handling */ }
      	)
     }
    

  2. рдкреНрд░рдкрддреНрд░ рдбреЗрдЯрд╛ рдХреЛ рд╕реВрдЪреА рдПрдбрд╛рдкреНрдЯрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдЕрджреНрд╡рд┐рддреАрдп рдлреЙрд░реНрдо рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд╡реНрдпреВрд╣реЙрд▓реНрдбрд░ рдореЗрдВ рд╣реИрдВред рдШрдЯрдХ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрд┐рдд ViewHolder рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

    // TransferFormView
    fun render(sm: TransferFormScreenModel) {
        //      
        //   EasyAdapter [3]
        val list = ItemList.create()
        //       Controller,
        //       
    
        sm.data
            .filter { transferField -> transferField.visible }
            .forEach { transferField ->
                when (transferField.type) {
                    TransferFieldType.PHONE_INPUT -> {
                        list.add(
                            PhoneInputFieldData(transferField),
                            phoneInputController
                        )
                    }
                    TransferFieldType.MONEY -> {
                        list.add(
                            MoneyInputFieldData(transferField),
                            moneyInputController
                        )
                    }
                    TransferFieldType.BUTTON -> {
                        list.add(
                            ButtonInputFieldData(transferField),
                            buttonController
                        )
                    }
                    else -> {
                        list.add(
                            TextInputFieldData(transferField),
                            textInputController
                        )
                    }
                }
            }
            //     RecyclerView
            adapter.setItems(list)
    }  
    

  3. рд╡рд┐рдЬреЗрдЯ ViewHolder рдХреА рдмрд╛рдЗрдВрдб рд╡рд┐рдзрд┐ рдореЗрдВ рдЖрд░рдВрднреАрдХреГрдд рд╣реИред рд░реЗрдВрдбрд░ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рдЬреЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЖрдИрдбреА рд╕реЗрдЯ рдХрд░рдирд╛ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕рдХрд╛ DI рд╕реНрдХреЛрдк рдмрдиреЗрдЧрд╛ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдлреЙрд░реНрдо рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреА рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЖрдИрдбреА рдереА, рдЬреЛ рдЗрдирдкреБрдЯ рдХреА рдирд┐рдпреБрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдереА рдФрд░ рддрддреНрд╡ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЖрдИ (рдкреНрд░рдХрд╛рд░ рдХреЛ рдлрд╛рд░реНрдо рдкрд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

    // ViewHolder
    override fun bind(data: TransferFieldUi) {
    	// get initialize params from given data
    	itemView.findViewById(R.id.field_tif).initialize(...)
    }
    

  4. рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рдзрд┐ рд╡рд┐рдЬреЗрдЯ рджреГрд╢реНрдп рдбреЗрдЯрд╛ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреА рд╣реИ, рдЬреЛ рдлрд┐рд░ рдСрдирдХреНрд░реАрдЯ рд▓рд╛рдЗрдл рд╕рд╛рдЗрдХрд▓ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд╣рд╛рдБ рдлрд╝реАрд▓реНрдб рдорд╛рди рд╡рд┐рдЬреЗрдЯ рдореЙрдбрд▓ рдФрд░ рдЗрд╕рдХреЗ рд░реЗрдВрдбрд░ рдкрд░ рд╕реЗрдЯ рд╣реЛрддреЗ рд╣реИрдВред

    // TextInputFieldWidget
    fun initialize(
           id: String = this.id,
           value: String = this.value,
           hint: String = this.hint,
           errorText: String = this.errorText
    ) {
           this.id = id
           this.value = value
           this.hint = hint
           this.errorText = errorText
    }
        
    override fun onCreate() {
           presenter.onCreate(value, hint, errorText)
           // other logic...
    }
    // TextInputFieldPresenter
    fun onCreate(value: String, hint: String, errorText: String) {
           sm.value = value
           sm.hint = hint
           sm.errorText = errorText
           view.render(sm)
    }
    


рдкрд╛рдиреА рдХреЗ рдиреАрдЪреЗ рдХреА рдЪрдЯреНрдЯрд╛рдиреЗрдВ


рдЬреИрд╕рд╛ рдХрд┐ рд╡рд┐рд╡рд░рдг рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рд╕рд╣рдЬ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕реА рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд┐рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ


рдЪреВрдБрдХрд┐ рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЗ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпреВрдЧреНрд░реБрдкреНрд╕ рдХреЗ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЛ рднреА рдЬрд╛рдирддреЗ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░, рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЛ рд╡реНрдпреВрд╣реЙрд▓реНрдбрд░ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐ рд╕реЗ рдХреЙрд▓ рдХрд░рдХреЗ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдиреНрдп рдЖрд░рдВрднреАрдХрд░рдг рдСрдирдХреНрд░рд┐рдПрдЯ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд▓рд┐рдХ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛) - рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ onAttachedToWindow рдХреЗ рдмрд╛рдж рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рдЬреЗрдЯ рд▓реЙрдЬрд┐рдХ рдХреА рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

// CoreFrameLayoutView (      ViewGroup)
public abstract class CoreFrameLayoutView
          extends FrameLayout implements CoreWidgetViewInterface {
тАж
@Override
protected void onAttachedToWindow() {
   super.onAttachedToWindow();
   if (!isManualInitEnabled) {
        widgetViewDelegate = createWidgetViewDelegate();
        widgetViewDelegate.onCreate();
   }
}

public void onCreate() {
    //empty. define in descendant class if needed
}

// WidgetViewDelegate
public class WidgetViewDelegate {
тАж
public void onCreate() {
   // other logic of widget initialization
   coreWidgetView.onCreate();
}

рд╣рдореЗрд╢рд╛ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреА рд╕рдлрд╛рдИ рдХрд░реЗрдВ


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

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

// TextInputFieldWidget
override fun onCreate() {
     initListeners()
}

override fun onDetachedFromWindow() {
      super.onDetachedFromWindow()
      clearListeners()
}

рд╡рд┐рдЬреЗрдЯ рд╡рд┐рдЬреЗрдЯ рдИрд╡реЗрдВрдЯ рд╕рджрд╕реНрдпрддрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ


рд╡рд┐рдЬреЗрдЯ рд╡рд╛рд▓реА рд╕реНрдХреНрд░реАрди рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдЬреЗрдЯ рдХреЗ рдЗрдирдкреБрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рд╕реВрдЪрдирд╛ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдЬреЗрдЯ рдХрд╛ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрддреНрд╕рд░реНрдЬрдХ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реНрдХреНрд░реАрди рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддрд╛ рд╣реИред рдШрдЯрдирд╛ рдореЗрдВ рд╡рд┐рдЬреЗрдЯ рдЖрдИрдбреА рдФрд░ рдЙрд╕рдХрд╛ рдбреЗрдЯрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕реНрдХреНрд░реАрди рдореЙрдбрд▓ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЗрдирдкреБрдЯ рдорд╛рди рд╕рд╣реЗрдЬреЗ рдЬрд╛рдПрдВ рдФрд░ рдЬрдм рдЖрдк рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рддреИрдпрд╛рд░ рдбреЗрдЯрд╛ рдЕрдиреБрд░реЛрдз рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдлреЙрд░реНрдо рд╕рддреНрдпрд╛рдкрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ: рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдереА, рддреЛ рдЕрдиреБрд░реЛрдз рдкрд╣рд▓реЗ рд╕реЗ рд╕рд╣реЗрдЬреЗ рдЧрдП рдлреЙрд░реНрдо рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред

// TextInputFieldWidget
private val defaultTextChangedListener = object : OnMaskedValueChangedListener {
        override fun onValueChanged(value: String) {
            presenter.onTextChange(value, id)
        }
}

// Events.kt
sealed class InputValueType(val id: String)

class TextValue(id: String, val value: String) : InputValueType(id)

class DataEvent(val data: InputValueType)

// TextInputFieldPresenter -  
fun onTextChange(value: String, id: String) {
	rxBus.emitEvent(DataEvent(data = TextValue(id = id, value = value)))
}

// TransferFormPresenter -  
private fun subscribeToEvents() {
	subscribe(rxBus.observeEvents(DataEvent::class.java))
        {
            handleValue(it.data) // handle data
        }
}

private fun handleValue(value: InputValueType) {
	 val id = value.id
	 when (value) {
		 // handle event using its type, saving event value using its id
	 	 is TextValue -> {
       		 	 sm.fieldValuesMap[id] = value.value
       	 	 }
		 else -> {
			// handle other events
		 }
 	 }
}
// TransferScreenModel
class TransferScreenModel : ScreenModel() {
 	 // map for form values: key = input id
	 val fieldValuesMap: MutableMap<String, String> = mutableMapOf()
}

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

рд╕рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдПрдХрдЬреБрдЯ рдХрд░реЗрдВ


рдореИрдВ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╡рд░реНрдгрд┐рдд рдорд╛рдорд▓рд╛ рдмреИрдХрдПрдВрдб рдХреЗ рд╕рд╛рде рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╕рдордиреНрд╡рдп рдХреЗ рдмрд╛рдж рд╣реА рд╕рдВрднрд╡ рд╣реИред

рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  • рдлрд╝реАрд▓реНрдб рдкреНрд░рдХрд╛рд░ред рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЙрд╕рдХреЗ рд╕рд╣реА рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдЙрдореНрдореАрдж рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред
  • тАФ , , , .
  • , .
  • . , : , , тАФ , -, .



рддрд░реНрдХ рдХреЗ рд╕рд╣реА рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЬреНрдЮрд╛рдд рд╣реЛрдиреЗ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рджреВрд╕рд░реА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдпрд╣ рд╣реИ рдХрд┐ рдлреЙрд░реНрдо рдХреЗ рдШрдЯрдХ рдЖрдорддреМрд░ рдкрд░ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдкрд░рд┐рджреГрд╢реНрдп рд╕рдВрднрд╡ рд╣реИрдВ рдЬрдм, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рддрддреНрд╡ рдХреА рджреГрд╢реНрдпрддрд╛ рджреВрд╕рд░реЗ рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИред рдЗрд╕ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдирд┐рд░реНрднрд░ рддрддреНрд╡ рд╣рдореЗрд╢рд╛ рдПрдХ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рддрд░реНрдХ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреМрди рд╕реЗ рдШрдЯрдХ рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рдФрд░ рдХреИрд╕реЗ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рд╣рд╛рдВ, рд╡рд┐рдХрд╛рд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рд░реНрд╡рд░ рдЯреАрдо рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдм рд╕рд╣рдордд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдирд┐рд╖реНрдХрд░реНрд╖


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

рдЙрдкрдпреЛрдЧреА рдХрдбрд╝рд┐рдпрд╛рдБ


  1. рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕рд░реНрдл
  2. рд╡рд┐рдЬреЗрдЯ рдореЙрдбреНрдпреВрд▓
  3. рдЬрдЯрд┐рд▓ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд░рд▓ рд░реЗрдВрдбрд░ рдХрд╛ рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
  4. рдкреНрд░рд╕реНрддреБрддрд┐ рдореЙрдбреЗрд▓ рдкреИрдЯрд░реНрди

All Articles