{"id":27538,"date":"2021-11-27T18:39:02","date_gmt":"2021-11-27T15:09:02","guid":{"rendered":"https:\/\/privateblog.maktabkhooneh.org\/mag\/?p=27538"},"modified":"2026-04-06T18:39:52","modified_gmt":"2026-04-06T15:09:52","slug":"whats-mvvm-pattern","status":"publish","type":"post","link":"https:\/\/maktabkhooneh.org\/mag\/whats-mvvm-pattern\/","title":{"rendered":"\u0622\u0645\u0648\u0632\u0634 \u0627\u0644\u06af\u0648\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc MVVM \u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u0627 MVVM<\/h2>\n\n\n\n<p>Model \u2014 View \u2014 ViewModel (MVVM) \u0627\u0644\u06af\u0648\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631 \u0634\u0646\u0627\u062e\u062a\u0647\u200c\u0634\u062f\u0647 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u06cc&nbsp;\u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631 \u062a\u0645\u0627\u0645 \u0627\u0634\u06a9\u0627\u0644\u0627\u062a \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0637\u0631\u0627\u062d\u06cc MVP \u0648 MVC \u063a\u0644\u0628\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f. MVVM \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u0645\u0646\u0637\u0642 \u0627\u0631\u0627\u0626\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 Views \u06cc\u0627 UI \u0631\u0627 \u0627\u0632 \u0628\u062e\u0634 \u0645\u0646\u0637\u0642 \u062a\u062c\u0627\u0631\u06cc \u0627\u0635\u0644\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u062f\u0627 \u06a9\u0646\u06cc\u062f. \u062f\u0631 \u0627\u062f\u0627\u0645\u0647 \u0628\u0627 \u0645\u0639\u0645\u0627\u0631\u06cc MVVM \u0628\u0647\u200c\u062e\u0648\u0628\u06cc \u0622\u0634\u0646\u0627 \u0645\u06cc\u200c\u0634\u0648\u06cc\u0645 \u0648 <strong>\u0622\u0645\u0648\u0632\u0634 MVVM<\/strong> \u0631\u0627 \u0628\u0627\u0647\u0645 \u0645\u0648\u0631\u062f\u0628\u0631\u0631\u0633\u06cc \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u062f\u0647\u06cc\u0645.<\/p>\n\n\n\n<p>\u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0648 \u0633\u0627\u06cc\u0631 \u067e\u0644\u062a\u0641\u0631\u0645\u200c\u0647\u0627 \u0647\u0645\u06cc\u0634\u0647 \u06cc\u06a9 \u06a9\u062f \u062a\u0645\u06cc\u0632 \u0648 \u0633\u0627\u062e\u062a\u0627\u0631\u06cc\u0627\u0641\u062a\u0647 \u0631\u0627 \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627 \u062a\u0631\u062c\u06cc\u062d \u0645\u06cc\u200c\u062f\u0647\u0646\u062f. \u0633\u0627\u0632\u0645\u0627\u0646\u200c\u062f\u0647\u06cc \u06a9\u062f\u0647\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0627\u0644\u06af\u0648\u06cc \u0637\u0631\u0627\u062d\u06cc \u0628\u0647 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0628\u0647\u062a\u0631 \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631 \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0627 \u0622\u06af\u0627\u0647\u06cc \u0627\u0632 \u062a\u0645\u0627\u0645 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0645\u0646\u0637\u0642\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u060c \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0648 \u062d\u0630\u0641 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0622\u0633\u0627\u0646\u200c\u062a\u0631 \u0627\u0633\u062a. \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646\u060c \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0637\u0631\u0627\u062d\u06cc \u06cc\u0627 \u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0647\u0645\u0686\u0646\u06cc\u0646 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f \u06a9\u0647 \u062a\u0645\u0627\u0645 \u06a9\u062f\u0647\u0627 \u062f\u0631 \u062a\u0633\u062a \u0648\u0627\u062d\u062f \u0628\u062f\u0648\u0646 \u062f\u062e\u0627\u0644\u062a \u06a9\u0644\u0627\u0633\u200c\u0647\u0627\u06cc \u062f\u06cc\u06af\u0631 \u067e\u0648\u0634\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u0646\u062f.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0627\u0646\u0648\u0627\u0639 \u0645\u0639\u0645\u0627\u0631\u06cc\u200c\u0647\u0627 \u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f<\/h2>\n\n\n\n<p>\u0648\u0642\u062a\u06cc \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0631\u0648\u06cc \u06cc\u06a9 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0648\u0627\u0642\u0639\u06cc \u06a9\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f \u06a9\u0647 \u0645\u0627\u0647\u06cc\u062a \u0622\u0646 \u067e\u0648\u06cc\u0627 \u0627\u0633\u062a \u0648 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0622\u0646 \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0646\u06cc\u0627\u0632 \u06a9\u0627\u0631\u0628\u0631 \u06af\u0633\u062a\u0631\u0634 \u0645\u06cc\u200c\u062f\u0647\u062f\u060c \u062f\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u0627\u0645\u06a9\u0627\u0646 \u0646\u0648\u0634\u062a\u0646 \u0645\u0646\u0637\u0642 \u0627\u0635\u0644\u06cc \u062f\u0631 \u0641\u0639\u0627\u0644\u06cc\u062a\u200c\u0647\u0627 \u06cc\u0627 \u0642\u0637\u0639\u0627\u062a \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f. \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a\u0627\u0631 \u06a9\u062f \u067e\u0631\u0648\u0698\u0647 \u0648 \u062f\u0627\u062f\u0646 \u0637\u0631\u062d\u06cc \u0645\u062f\u0648\u0644\u0627\u0631 \u0628\u0647 \u0622\u0646 (\u0642\u0637\u0639\u0627\u062a \u06a9\u062f \u0645\u062c\u0632\u0627)\u060c \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0628\u0631\u0627\u06cc \u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0646\u06af\u0631\u0627\u0646\u06cc\u200c\u0647\u0627 \u0627\u0639\u0645\u0627\u0644 \u0645\u06cc\u200c\u0634\u0648\u062f. \u0645\u062d\u0628\u0648\u0628\u200c\u062a\u0631\u06cc\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc\u200c\u0647\u0627\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u06cc \u06a9\u0647 \u062a\u0648\u0633\u0637 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f \u0628\u0647 \u0634\u0631\u062d \u0632\u06cc\u0631 \u0627\u0633\u062a:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>MVC (Model \u2014 View \u2014 Controller)<\/li>\n\n\n\n<li>MVP (Model \u2014 View \u2014 Presenter)<\/li>\n\n\n\n<li>MVVM (Model \u2014 View \u2014 ViewModel)<\/li>\n<\/ul>\n\n\n\n<p>\u0627\u06cc\u062f\u0647 \u0627\u0635\u0644\u06cc \u0647\u0645\u0647 \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648\u0647\u0627 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u0628\u0647 \u0631\u0648\u0634\u06cc \u0645\u0646\u0627\u0633\u0628 \u0633\u0627\u0632\u0645\u0627\u0646\u200c\u062f\u0647\u06cc \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0647\u0645\u0647 \u06a9\u062f\u0647\u0627 \u062f\u0631 \u062a\u0633\u062a \u0648\u0627\u062d\u062f \u067e\u0648\u0634\u0634 \u062f\u0627\u062f\u0647 \u0634\u0648\u0646\u062f. \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646\u060c \u0627\u0641\u0632\u0648\u062f\u0646 \u0648 \u062d\u0630\u0641 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627 \u062f\u0631 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631 \u0628\u0633\u06cc\u0627\u0631 \u0622\u0633\u0627\u0646\u200c\u062a\u0631 \u0627\u0633\u062a \u0648 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0645\u0646\u0637\u0642\u06cc \u062d\u06cc\u0627\u062a\u06cc \u0631\u0627 \u067e\u06cc\u06af\u06cc\u0631\u06cc \u06a9\u0646\u0646\u062f.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img fetchpriority=\"high\" decoding=\"async\" width=\"960\" height=\"720\" src=\"https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2021\/11\/3-20.jpg\" alt=\"\u0627\u0646\u0648\u0627\u0639 \u0645\u0639\u0645\u0627\u0631\u06cc\u200c\u0647\u0627 \u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\" class=\"wp-image-27542\" title=\"\" srcset=\"https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2021\/11\/3-20.jpg 960w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2021\/11\/3-20-300x225.jpg 300w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/smush-webp\/2021\/11\/3-20-768x576.jpg.webp 768w\" sizes=\"(max-width: 960px) 100vw, 960px\" \/><figcaption><\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f Model-View-Controller (MVC)<\/h3>\n\n\n\n<p>\u0645\u0639\u0645\u0627\u0631\u06cc MVC \u0642\u062f\u06cc\u0645\u06cc\u200c\u062a\u0631\u06cc\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647\u200c\u0633\u0627\u062f\u06af\u06cc \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u062f \u0631\u0627 \u0628\u0647 \u06f3 \u0644\u0627\u06cc\u0647 \u0645\u062e\u062a\u0644\u0641 \u062c\u062f\u0627 \u06a9\u0646\u06cc\u062f:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0645\u062f\u0644 (Model): \u0644\u0627\u06cc\u0647\u200c\u0627\u06cc \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647\u200c\u0633\u0627\u0632\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0627\u0633\u062a. \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u0645\u0646\u0637\u0642 \u062f\u0627\u0645\u0646\u0647 (\u0642\u0648\u0627\u0646\u06cc\u0646 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062f\u0631 \u062f\u0646\u06cc\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc) \u0648 \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0627 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0648 \u0644\u0627\u06cc\u0647\u200c\u0647\u0627\u06cc \u0634\u0628\u06a9\u0647 \u0631\u0627 \u0628\u0631 \u0639\u0647\u062f\u0647 \u062f\u0627\u0631\u062f.<\/li>\n\n\n\n<li>\u0646\u0645\u0627\u06cc\u0634(View): \u0644\u0627\u06cc\u0647 UI (\u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc). \u062a\u062c\u0633\u0645 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647\u200c\u0634\u062f\u0647 \u062f\u0631 \u0645\u062f\u0644 \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/li>\n\n\n\n<li>\u06a9\u0646\u062a\u0631\u0644\u200c\u06a9\u0646\u0646\u062f\u0647(Controller): \u0644\u0627\u06cc\u0647\u200c\u0627\u06cc \u06a9\u0647 \u062d\u0627\u0648\u06cc \u0645\u0646\u0637\u0642 \u0647\u0633\u062a\u0647 \u0627\u0633\u062a. \u0627\u0632 \u0631\u0641\u062a\u0627\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0645\u0637\u0644\u0639 \u0645\u06cc\u200c\u0634\u0648\u062f \u0648 \u0645\u062f\u0644 \u0631\u0627 \u0628\u0646\u0627 \u0628\u0647 \u0646\u06cc\u0627\u0632 \u0628\u0647\u200c\u0631\u0648\u0632 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/li>\n<\/ul>\n\n\n\n<p>\u062f\u0631 \u0645\u062f\u0644 \u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f MVC\u060c View \u0648 Controller \u0647\u0631 \u062f\u0648 \u0628\u0647 \u0645\u062f\u0644 \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u0646\u062f. \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0628\u0647\u200c\u0631\u0648\u0632 \u0645\u06cc\u200c\u0634\u0648\u062f \u0648 View \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u062f. \u062f\u0631 \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648\u060c \u0645\u062f\u0644 \u0631\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646 \u0645\u0633\u062a\u0642\u0644 \u0627\u0632 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u06a9\u0647 \u062c\u062f\u0627 \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0631\u062f.<\/p>\n\n\n\n<p>\u0686\u0646\u062f\u06cc\u0646 \u0631\u0648\u0634 \u0628\u0631\u0627\u06cc \u0627\u0639\u0645\u0627\u0644 \u0627\u0644\u06af\u0648\u06cc MVC \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f. \u0641\u0639\u0627\u0644\u06cc\u062a\u200c\u0647\u0627 \u0648 \u0642\u0637\u0639\u0627\u062a \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f \u0645\u0627\u0646\u0646\u062f \u06a9\u0646\u062a\u0631\u0644\u200c\u06a9\u0646\u0646\u062f\u0647 \u0639\u0645\u0644 \u06a9\u0646\u0646\u062f\u060c \u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u067e\u0631\u062f\u0627\u0632\u0634 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0648 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0646\u0645\u0627\u0647\u0627 \u0631\u0627 \u0628\u0631 \u0639\u0647\u062f\u0647\u200c\u062f\u0627\u0631\u0646\u062f. \u0631\u0627\u0647 \u062f\u06cc\u06af\u0631 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0627\u0632 Activity \u0647\u0627 \u0648 Fragment \u0647\u0627 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 Views \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u0648 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 Models \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u06a9\u0644\u0627\u0633 \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u0628\u0627\u0634\u062f \u06a9\u0647 \u0647\u06cc\u0686 \u06a9\u0644\u0627\u0633 Android \u0631\u0627 \u06af\u0633\u062a\u0631\u0634 \u0646\u062f\u0647\u062f.<\/p>\n\n\n\n<p>\u0627\u06af\u0631 Views \u0628\u0647 \u0627\u0635\u0644 \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0648\u0627\u062d\u062f \u067e\u0627\u06cc\u0628\u0646\u062f \u0628\u0627\u0634\u062f\u060c \u0646\u0642\u0634 \u0622\u0646\u200c\u0647\u0627 \u0641\u0642\u0637 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u06a9\u0646\u062a\u0631\u0644\u0631 \u0628\u0631\u0627\u06cc \u0647\u0631 \u0631\u0648\u06cc\u062f\u0627\u062f \u06a9\u0627\u0631\u0628\u0631 \u0648 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0627\u0632 \u0645\u062f\u0644 \u0628\u062f\u0648\u0646 \u0627\u062c\u0631\u0627\u06cc \u0647\u06cc\u0686 \u0645\u0646\u0637\u0642 \u062a\u062c\u0627\u0631\u06cc \u0627\u0633\u062a. \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0648\u0631\u062f\u060c \u062a\u0633\u062a\u200c\u0647\u0627\u06cc UI \u0628\u0627\u06cc\u062f \u0628\u0631\u0627\u06cc \u067e\u0648\u0634\u0634 \u0639\u0645\u0644\u06a9\u0631\u062f\u0647\u0627\u06cc View \u06a9\u0627\u0641\u06cc \u0628\u0627\u0634\u062f.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img decoding=\"async\" width=\"960\" height=\"720\" data-src=\"https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2021\/11\/2-23.jpg\" alt=\"\u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f MVC\" class=\"wp-image-27544 lazyload\" title=\"\" data-srcset=\"https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2021\/11\/2-23.jpg 960w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2021\/11\/2-23-300x225.jpg 300w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/smush-webp\/2021\/11\/2-23-768x576.jpg.webp 768w\" data-sizes=\"(max-width: 960px) 100vw, 960px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 960px; --smush-placeholder-aspect-ratio: 960\/720;\" \/><figcaption><\/figcaption><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">\u0645\u0632\u0627\u06cc\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc MVC<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0627\u0644\u06af\u0648\u06cc MVC \u062a\u0633\u062a \u067e\u0630\u06cc\u0631\u06cc \u06a9\u062f \u0631\u0627 \u0627\u0641\u0632\u0627\u06cc\u0634 \u0645\u06cc\u200c\u062f\u0647\u062f \u0648 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0631\u0627 \u0622\u0633\u0627\u0646\u200c\u062a\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0632\u06cc\u0631\u0627 \u0627\u0632 \u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0646\u06af\u0631\u0627\u0646\u06cc\u200c\u0647\u0627 \u0628\u0633\u06cc\u0627\u0631 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/li>\n\n\n\n<li>\u0622\u0632\u0645\u0627\u06cc\u0634 \u0648\u0627\u062d\u062f \u0645\u062f\u0644 \u0648 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0627\u0645\u06a9\u0627\u0646\u200c\u067e\u0630\u06cc\u0631 \u0627\u0633\u062a \u0632\u06cc\u0631\u0627 \u0622\u0646\u200c\u0647\u0627 \u0627\u0632 \u0647\u06cc\u0686 \u06a9\u0644\u0627\u0633 Android \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0646\u062f.<\/li>\n\n\n\n<li>\u062f\u0631\u0635\u0648\u0631\u062a\u06cc\u200c\u06a9\u0647 View \u0628\u0647 \u0627\u0635\u0644 \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0648\u0627\u062d\u062f (\u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u06a9\u0646\u062a\u0631\u0644\u200c\u06a9\u0646\u0646\u062f\u0647 \u0648 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0627\u0632 \u0645\u062f\u0644 \u0628\u062f\u0648\u0646 \u0627\u062c\u0631\u0627\u06cc \u0645\u0646\u0637\u0642 \u062f\u0627\u0645\u0646\u0647) \u0627\u062d\u062a\u0631\u0627\u0645 \u0628\u06af\u0630\u0627\u0631\u062f\u060c \u0639\u0645\u0644\u06a9\u0631\u062f\u0647\u0627\u06cc View \u0631\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u062a\u0633\u062a\u200c\u0647\u0627\u06cc UI \u0628\u0631\u0631\u0633\u06cc \u06a9\u0631\u062f.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\u0645\u0639\u0627\u06cc\u0628:<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0644\u0627\u06cc\u0647\u200c\u0647\u0627\u06cc \u06a9\u062f \u0628\u0647 \u06cc\u06a9\u062f\u06cc\u06af\u0631 \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u0646\u062f \u062d\u062a\u06cc \u0627\u06af\u0631 MVC \u0628\u0647\u200c\u062f\u0631\u0633\u062a\u06cc \u0627\u0639\u0645\u0627\u0644 \u0634\u0648\u062f.<\/li>\n\n\n\n<li>\u0647\u06cc\u0686 \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u06cc \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u0646\u0637\u0642 UI\u060c \u06cc\u0639\u0646\u06cc \u0646\u062d\u0648\u0647 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f Model-View-Presenter (MVP).<\/h3>\n\n\n\n<p>\u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f MVP \u062f\u0648\u0645\u06cc\u0646 \u062a\u06a9\u0631\u0627\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648 \u0628\u0647\u200c\u0637\u0648\u0631 \u06af\u0633\u062a\u0631\u062f\u0647 \u067e\u0630\u06cc\u0631\u0641\u062a\u0647\u200c\u0634\u062f\u0647 \u0627\u0633\u062a \u0648 \u0647\u0645\u0686\u0646\u0627\u0646 \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0622\u06cc\u0646\u062f\u0647 \u062a\u0648\u0635\u06cc\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f. \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0622\u0646 \u0628\u0647 \u0646\u0633\u0628\u062a \u0645\u062f\u0644 \u0645\u0639\u0645\u0627\u0631\u06cc \u0628\u0627\u0644\u0627 \u0622\u0633\u0627\u0646\u200c\u062a\u0631 \u0627\u0633\u062a.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0645\u062f\u0644(Model): \u0644\u0627\u06cc\u0647\u200c\u0627\u06cc \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647\u200c\u0633\u0627\u0632\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627. \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u0645\u0646\u0637\u0642 \u062f\u0627\u0645\u0646\u0647 (\u0642\u0648\u0627\u0646\u06cc\u0646 \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u062f\u0631 \u062f\u0646\u06cc\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc) \u0648 \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0627 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0648 \u0644\u0627\u06cc\u0647\u200c\u0647\u0627\u06cc \u0634\u0628\u06a9\u0647 \u0631\u0627 \u0628\u0631 \u0639\u0647\u062f\u0647 \u062f\u0627\u0631\u062f.<\/li>\n\n\n\n<li>\u0646\u0645\u0627\u06cc\u0634 (View): \u0644\u0627\u06cc\u0647 UI (\u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc). \u062a\u062c\u0633\u0645 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u0639\u0645\u0644\u06a9\u0631\u062f \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0647\u200c\u0645\u0646\u0638\u0648\u0631 \u0627\u0637\u0644\u0627\u0639 \u062f\u0627\u062f\u0646 \u0628\u0647 \u0627\u0631\u0627\u0626\u0647\u200c\u06a9\u0646\u0646\u062f\u0647 \u067e\u06cc\u06af\u06cc\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/li>\n\n\n\n<li>\u0627\u0631\u0627\u0626\u0647\u200c\u062f\u0647\u0646\u062f\u0647 (Presenter): \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0627 \u0627\u0632 \u0645\u062f\u0644 \u0648\u0627\u06a9\u0634\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u0645\u0646\u0637\u0642 UI \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0635\u0645\u06cc\u0645\u200c\u06af\u06cc\u0631\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0646 \u0627\u0639\u0645\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0648\u0636\u0639\u06cc\u062a View \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u0637\u0628\u0642 \u0627\u0639\u0644\u0627\u0646 \u0648\u0631\u0648\u062f\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 View \u0627\u0642\u062f\u0627\u0645\u0627\u062a\u06cc \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u200c\u062f\u0647\u062f.<\/li>\n<\/ul>\n\n\n\n<p>\u062f\u0631 \u0637\u0631\u062d\u200c\u0648\u0627\u0631\u0647 MVP\u060c View \u0648 Presenter \u0627\u0631\u062a\u0628\u0627\u0637 \u0646\u0632\u062f\u06cc\u06a9\u06cc \u062f\u0627\u0631\u0646\u062f \u0648 \u0628\u0647 \u06cc\u06a9\u062f\u06cc\u06af\u0631 \u0627\u0631\u062c\u0627\u0639 \u062f\u0627\u0631\u0646\u062f. \u0628\u0631\u0627\u06cc \u062e\u0648\u0627\u0646\u0627\u06cc\u06cc \u06a9\u062f \u0648 \u062f\u0631\u06a9 \u0622\u0633\u0627\u0646\u200c\u062a\u0631\u060c \u0627\u0632 \u06a9\u0644\u0627\u0633 \u0631\u0627\u0628\u0637 Contract \u0628\u0631\u0627\u06cc \u062a\u0639\u0631\u06cc\u0641 \u0631\u0627\u0628\u0637\u0647 Presenter \u0648 View \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f. \u0627\u06cc\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0646\u0645\u0627\u06cc \u0627\u0646\u062a\u0632\u0627\u0639\u06cc \u0627\u0633\u062a \u0648 \u062f\u0627\u0631\u0627\u06cc \u06cc\u06a9 \u0631\u0627\u0628\u0637 \u0627\u0633\u062a \u062a\u0627 \u0627\u0631\u0627\u0626\u0647\u200c\u062f\u0647\u0646\u062f\u0647 \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0633\u062a \u0648\u0627\u062d\u062f \u0641\u0639\u0627\u0644 \u06a9\u0646\u062f.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img decoding=\"async\" width=\"960\" height=\"720\" data-src=\"https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2021\/11\/1-22.jpg\" alt=\"\u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f MVP\" class=\"wp-image-27543 lazyload\" title=\"\" data-srcset=\"https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2021\/11\/1-22.jpg 960w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2021\/11\/1-22-300x225.jpg 300w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/smush-webp\/2021\/11\/1-22-768x576.jpg.webp 768w\" data-sizes=\"(max-width: 960px) 100vw, 960px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 960px; --smush-placeholder-aspect-ratio: 960\/720;\" \/><figcaption><\/figcaption><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">\u0645\u0632\u0627\u06cc\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f MVP:<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0647\u06cc\u0686 \u0631\u0627\u0628\u0637\u0647 \u0645\u0641\u0647\u0648\u0645\u06cc \u062f\u0631 \u0627\u062c\u0632\u0627\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f<\/li>\n\n\n\n<li>\u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0648 \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u062f \u0622\u0633\u0627\u0646 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u0645\u062f\u0644\u060c \u0646\u0645\u0627\u06cc \u0648 \u0644\u0627\u06cc\u0647 \u0627\u0631\u0627\u0626\u0647\u200c\u062f\u0647\u0646\u062f\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0632 \u0647\u0645 \u062c\u062f\u0627\u0634\u062f\u0647 \u0627\u0633\u062a.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\u0645\u0639\u0627\u06cc\u0628 \u0645\u0639\u0645\u0627\u0631\u06cc MVP:<\/h4>\n\n\n\n<p>\u0627\u06af\u0631 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u0647 \u0627\u0632 \u0627\u0635\u0644 \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0648\u0627\u062d\u062f \u0628\u0631\u0627\u06cc \u0634\u06a9\u0633\u062a\u0646 \u06a9\u062f \u067e\u06cc\u0631\u0648\u06cc \u0646\u06a9\u0646\u062f\u060c \u0644\u0627\u06cc\u0647 Presenter \u062a\u0645\u0627\u06cc\u0644 \u062f\u0627\u0631\u062f \u062a\u0627 \u0628\u0647 \u06cc\u06a9 \u06a9\u0644\u0627\u0633 \u0628\u0632\u0631\u06af \u0647\u0645\u0647\u200c\u0686\u06cc\u0632 \u06af\u0633\u062a\u0631\u0634 \u06cc\u0627\u0628\u062f.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f Model\u2014View\u2014ViewModel (MVVM)<\/h3>\n\n\n\n<p>\u0633\u0648\u0645\u06cc\u0646 \u062a\u06a9\u0631\u0627\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0644\u06af\u0648\u06cc MVVM \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0647\u062f\u0641 \u0627\u0635\u0644\u06cc \u0645\u0627 \u0646\u06cc\u0632 <strong>\u0622\u0645\u0648\u0632\u0634 MVVM<\/strong> \u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0633\u062a. \u062f\u0631 \u062d\u06cc\u0646 \u0627\u0646\u062a\u0634\u0627\u0631 \u0627\u062c\u0632\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u060c \u062a\u06cc\u0645 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u0631\u0627 \u062a\u0648\u0635\u06cc\u0647 \u06a9\u0631\u062f. \u062f\u0631 \u0627\u06cc\u0646 \u0642\u0633\u0645\u062a \u0642\u0635\u062f \u062f\u0627\u0631\u06cc\u0645 \u0622\u0645\u0648\u0632\u0634 MVVM \u0631\u0627 \u0628\u0627 \u0627\u0631\u0627\u0626\u0647 \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 \u0639\u0645\u0644\u06cc \u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0633\u062a\u0648\u062f\u06cc\u0648 \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u06cc\u0645\u061b \u0627\u0645\u0627 \u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0628\u0647 \u0633\u0631\u0627\u063a \u0633\u0627\u062e\u062a \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u060c \u0627\u0628\u062a\u062f\u0627 \u0628\u0647\u200c\u062e\u0648\u0628\u06cc \u0628\u0627\u06cc\u062f \u0628\u0627 \u0645\u0639\u0645\u0627\u0631\u06cc MVVM \u0622\u0634\u0646\u0627 \u0628\u0627\u0634\u06cc\u0645.<\/p>\n\n\n\n<p>Model-View-ViewModel (MVVM) \u06cc\u06a9 \u0627\u0644\u06af\u0648\u06cc \u0637\u0631\u0627\u062d\u06cc \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631\u0627\u06cc \u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0645\u0646\u0637\u0642 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648 \u06a9\u0646\u062a\u0631\u0644\u200c\u0647\u0627\u06cc \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0633\u0627\u062e\u062a\u0647\u200c\u0634\u062f\u0647 \u0627\u0633\u062a. MVVM \u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 model-view-binder \u0634\u0646\u0627\u062e\u062a\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f \u0648 \u062a\u0648\u0633\u0637 \u0645\u0639\u0645\u0627\u0631\u0627\u0646 \u0645\u0627\u06cc\u06a9\u0631\u0648\u0633\u0627\u0641\u062a \u06a9\u0646 \u06a9\u0648\u067e\u0631 \u0648 \u062c\u0627\u0646 \u06af\u0627\u0633\u0645\u0646 \u0633\u0627\u062e\u062a\u0647\u200c\u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n\n\n\n<p>\u0645\u0627\u0646\u0646\u062f \u0628\u0633\u06cc\u0627\u0631\u06cc \u0627\u0632 \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0637\u0631\u0627\u062d\u06cc \u062f\u06cc\u06af\u0631\u060c MVVM \u0628\u0647 \u0633\u0627\u0632\u0645\u0627\u0646\u200c\u062f\u0647\u06cc \u06a9\u062f \u0648 \u062a\u0628\u062f\u06cc\u0644 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0628\u0647 \u0645\u0627\u0698\u0648\u0644\u200c\u0647\u0627 \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u062f \u062a\u0627 \u062a\u0648\u0633\u0639\u0647\u060c \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u0627\u0632 \u06a9\u062f \u0631\u0627 \u0633\u0627\u062f\u0647\u200c\u062a\u0631 \u0648 \u0633\u0631\u06cc\u0639\u200c\u062a\u0631 \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648 \u0627\u063a\u0644\u0628 \u062f\u0631 \u0648\u06cc\u0646\u062f\u0648\u0632 \u0648 \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631\u0647\u0627\u06cc \u0627\u0631\u0627\u0626\u0647 \u06af\u0631\u0627\u0641\u06cc\u06a9 \u0648\u0628 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img decoding=\"async\" width=\"960\" height=\"720\" data-src=\"https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2021\/11\/4-17.jpg\" alt=\"\u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f MVVP\" class=\"wp-image-27547 lazyload\" title=\"\" data-srcset=\"https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2021\/11\/4-17.jpg 960w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2021\/11\/4-17-300x225.jpg 300w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/smush-webp\/2021\/11\/4-17-768x576.jpg.webp 768w\" data-sizes=\"(max-width: 960px) 100vw, 960px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 960px; --smush-placeholder-aspect-ratio: 960\/720;\" \/><figcaption><\/figcaption><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">\u0644\u0627\u06cc\u0647\u200c\u0647\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc MVVM \u0627\u0646\u062f\u0631\u0648\u06cc\u062f<\/h4>\n\n\n\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0628\u062e\u0634 \u0627\u0632 \u0622\u0645\u0648\u0632\u0634 MVVM \u0647\u0645\u0627\u0646\u0646\u062f \u0645\u0639\u0645\u0627\u0631\u06cc \u0628\u0627\u0644\u0627 \u06a9\u0647 \u062f\u0631 \u0631\u0627\u0628\u0637\u0647 \u0628\u0627 \u0622\u0646\u200c\u0647\u0627 \u0635\u062d\u0628\u062a \u06a9\u0631\u062f\u06cc\u0645\u060c \u0645\u0639\u0645\u0627\u0631\u06cc MVVM \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0646\u06cc\u0632 \u0627\u0632 \u0633\u0647 \u062c\u0632\u0621 \u0627\u0635\u0644\u06cc \u0632\u06cc\u0631 \u062a\u0634\u06a9\u06cc\u0644\u200c\u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0645\u062f\u0644: \u0627\u06cc\u0646 \u0644\u0627\u06cc\u0647 \u0648\u0638\u06cc\u0641\u0647 \u0627\u0646\u062a\u0632\u0627\u0639 \u0645\u0646\u0627\u0628\u0639 \u062f\u0627\u062f\u0647 \u0631\u0627 \u0628\u0631 \u0639\u0647\u062f\u0647 \u062f\u0627\u0631\u062f. Model \u0648 ViewModel \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0648 \u0630\u062e\u06cc\u0631\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0628\u0627\u0647\u0645 \u06a9\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f.<\/li>\n\n\n\n<li>View: \u0647\u062f\u0641 \u0627\u06cc\u0646 \u0644\u0627\u06cc\u0647 \u0627\u0637\u0644\u0627\u0639\u200c\u0631\u0633\u0627\u0646\u06cc \u0628\u0647 ViewModel \u062f\u0631 \u0645\u0648\u0631\u062f \u0639\u0645\u0644\u06a9\u0631\u062f \u06a9\u0627\u0631\u0628\u0631 \u0627\u0633\u062a.<\/li>\n\n\n\n<li>ViewModel: \u062c\u0631\u06cc\u0627\u0646\u200c\u0647\u0627\u06cc \u062f\u0627\u062f\u0647\u200c\u0627\u06cc \u0631\u0627 \u06a9\u0647 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 View \u0647\u0633\u062a\u0646\u062f \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f.<\/li>\n<\/ul>\n\n\n\n<p>\u0645\u0639\u0645\u0627\u0631\u06cc MVVM \u0648 MVP \u06a9\u0627\u0645\u0644\u0627\u064b \u0645\u0634\u0627\u0628\u0647 \u0647\u0633\u062a\u0646\u062f \u0632\u06cc\u0631\u0627 \u0647\u0631 \u062f\u0648 \u062f\u0631 \u0627\u0646\u062a\u0632\u0627\u0639 \u0648\u0636\u0639\u06cc\u062a \u0648 \u0631\u0641\u062a\u0627\u0631 \u0644\u0627\u06cc\u0647 View \u06a9\u0627\u0631\u0622\u0645\u062f \u0647\u0633\u062a\u0646\u062f. \u062f\u0631 MVVM\u060c Views \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u062c\u0631\u06cc\u0627\u0646\u200c\u0647\u0627\u06cc \u062f\u0627\u062f\u0647\u200c\u0627\u06cc \u06a9\u0647 \u062a\u0648\u0633\u0637 ViewModel \u062f\u0631 \u0645\u0639\u0631\u0636 \u062f\u06cc\u062f \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u062f\u060c \u0645\u062a\u0635\u0644 \u06a9\u0646\u062f.<\/p>\n\n\n\n<p>\u062f\u0631 \u0637\u0631\u062d\u200c\u0648\u0627\u0631\u0647 MVVM View \u0628\u0647 ViewModel \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0645\u062e\u062a\u0644\u0641 \u0627\u0637\u0644\u0627\u0639 \u0645\u06cc\u200c\u062f\u0647\u062f. View \u0627\u0631\u062c\u0627\u0639\u06cc \u0628\u0647 ViewModel \u062f\u0627\u0631\u062f \u062f\u0631\u062d\u0627\u0644\u06cc\u200c\u06a9\u0647 ViewModel \u0647\u06cc\u0686 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f View \u0646\u062f\u0627\u0631\u062f. \u0631\u0627\u0628\u0637\u0647 \u0686\u0646\u062f \u0628\u0647 \u06cc\u06a9 \u06a9\u0647 \u0628\u06cc\u0646 View \u0648 ViewModel \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u0648 MVVM \u0627\u0632 \u0627\u062a\u0635\u0627\u0644 \u062f\u0627\u062f\u0647 \u062f\u0648\u0637\u0631\u0641\u0647 \u0628\u06cc\u0646 \u0647\u0631 \u062f\u0648 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc MVVM<\/h4>\n\n\n\n<p>\u0627\u0644\u06af\u0648\u06cc MVVM \u0634\u0628\u0627\u0647\u062a\u200c\u0647\u0627\u06cc\u06cc \u0628\u0627 \u0627\u0644\u06af\u0648\u06cc \u0637\u0631\u0627\u062d\u06cc MVP (Model \u2014 View \u2014 Presenter) \u062f\u0627\u0631\u062f \u0632\u06cc\u0631\u0627 \u0646\u0642\u0634 Presenter \u062a\u0648\u0633\u0637 ViewModel \u0627\u06cc\u0641\u0627 \u0645\u06cc\u200c\u0634\u0648\u062f. \u0628\u0627\u0627\u06cc\u0646\u200c\u062d\u0627\u0644\u060c \u0627\u0634\u06a9\u0627\u0644\u0627\u062a \u0627\u0644\u06af\u0648\u06cc MVP \u062a\u0648\u0633\u0637 MVVM \u0628\u0647\u0631\u0648\u0634\u200c\u0647\u0627\u06cc \u0632\u06cc\u0631 \u062d\u0644\u200c\u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ViewModel \u0647\u06cc\u0686 \u0646\u0648\u0639 \u0627\u0631\u062c\u0627\u0639\u06cc \u0628\u0647 View \u0646\u062f\u0627\u0631\u062f.<\/li>\n\n\n\n<li>\u0631\u0627\u0628\u0637\u0647 \u0628\u06cc\u0646 View \u0648 ViewModel \u0628\u0633\u06cc\u0627\u0631 \u0628\u0647 \u06f1 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f.<\/li>\n\n\n\n<li>\u0647\u06cc\u0686 \u0631\u0648\u0634 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0628\u0631\u0627\u06cc \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc View \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\u0645\u0632\u0627\u06cc\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc MVVM<\/h4>\n\n\n\n<p>\u0645\u0639\u0645\u0627\u0631\u06cc MVVM \u0646\u0642\u0627\u0637 \u0642\u0648\u062a \u0628\u0633\u06cc\u0627\u0631 \u0632\u06cc\u0627\u062f\u06cc \u0646\u0633\u0628\u062a \u0628\u0647 \u062f\u0648 \u0645\u0639\u0645\u0627\u0631\u06cc \u0642\u0628\u0644 \u062e\u0648\u062f\u0634 \u0631\u0627 \u062f\u0627\u0631\u062f. \u062f\u0631 \u0627\u06cc\u0646 \u0628\u062e\u0634 \u0627\u0632 <strong>\u0622\u0645\u0648\u0632\u0634 MVVM<\/strong> \u0628\u0647 \u0645\u0632\u0627\u06cc\u0627\u06cc MVVM \u0645\u06cc\u200c\u067e\u0631\u062f\u0627\u0632\u06cc\u0645.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc\u06cc \u0631\u0627 \u0637\u0631\u0627\u062d\u06cc \u06a9\u0646\u0646\u062f \u06a9\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0631\u0627 \u062f\u0631 \u0622\u06cc\u0646\u062f\u0647 \u0628\u067e\u0630\u06cc\u0631\u0646\u062f.<\/li>\n\n\n\n<li>\u06cc\u06a9 \u0637\u0631\u0627\u062d\u06cc \u0645\u0627\u0698\u0648\u0644\u0627\u0631 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f \u06a9\u0647 \u062a\u0633\u062a \u06a9\u06cc\u0641\u06cc\u062a \u0648 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u06a9\u062f \u0631\u0627 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/li>\n\n\n\n<li>\u0627\u0641\u0632\u0627\u06cc\u0634 \u0642\u0627\u0628\u0644\u06cc\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u06a9\u062f<\/li>\n\n\n\n<li>\u0647\u0645\u0647 \u0645\u0627\u0698\u0648\u0644\u200c\u0647\u0627 \u0645\u0633\u062a\u0642\u0644 \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u062a\u0633\u062a \u067e\u0630\u06cc\u0631\u06cc \u0647\u0631 \u0644\u0627\u06cc\u0647 \u0631\u0627 \u0628\u0647\u0628\u0648\u062f \u0645\u06cc\u200c\u0628\u062e\u0634\u062f.<\/li>\n\n\n\n<li>\u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u0642\u0627\u0628\u0644 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0648 \u0627\u06cc\u062c\u0627\u062f \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0622\u0633\u0627\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\u0645\u0639\u0627\u06cc\u0628 \u0645\u0639\u0645\u0627\u0631\u06cc MVVM<\/h4>\n\n\n\n<p>\u0647\u0631\u0686\u0646\u062f \u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f MVVM \u0645\u0632\u0627\u06cc\u0627\u06cc \u0628\u0633\u06cc\u0627\u0631 \u0632\u06cc\u0627\u062f\u06cc \u062f\u0627\u0631\u062f\u060c \u0627\u0645\u0627 \u0627\u06cc\u0646 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc \u0646\u06cc\u0633\u062a \u06a9\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u0627\u0645\u0644 \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc \u0646\u06cc\u0632 \u0645\u0639\u0627\u06cc\u0628\u06cc \u062f\u0627\u0631\u062f \u06a9\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u0628\u062e\u0634 \u0627\u0632 \u0622\u0645\u0648\u0632\u0634 MVVM \u0628\u0647 \u0622\u0646 \u0645\u06cc\u200c\u067e\u0631\u062f\u0627\u0632\u06cc\u0645.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0646\u0648\u0634\u062a\u0646 \u06a9\u0644 \u06a9\u062f \u067e\u0631\u0648\u0698\u0647 \u062f\u0631 \u06cc\u06a9 \u0627\u0644\u06af\u0648\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u0641\u0631\u0622\u06cc\u0646\u062f\u06cc \u0632\u0645\u0627\u0646\u200c\u0628\u0631 \u0627\u0633\u062a.<\/li>\n\n\n\n<li>\u0646\u0638\u0645 \u0648 \u0627\u0646\u0636\u0628\u0627\u0637 \u062f\u0642\u06cc\u0642 \u0627\u0632 \u0637\u0631\u0641 \u062a\u06cc\u0645 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u0647 \u0645\u0648\u0631\u062f\u0646\u06cc\u0627\u0632 \u0627\u0633\u062a \u0632\u06cc\u0631\u0627 \u06cc\u06a9 \u062a\u063a\u06cc\u06cc\u0631 \u0646\u0627\u0628\u062c\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u06cc\u06a9\u067e\u0627\u0631\u0686\u06af\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u0631\u0627 \u062e\u0631\u0627\u0628 \u06a9\u0646\u062f.<\/li>\n\n\n\n<li>\u0627\u06cc\u0646 \u0627\u0644\u06af\u0648\u06cc \u0637\u0631\u0627\u062d\u06cc \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627\u06cc \u06a9\u0648\u0686\u06a9 \u0627\u06cc\u062f\u0647 \u0622\u0644 \u0646\u06cc\u0633\u062a.<\/li>\n\n\n\n<li>\u0627\u06af\u0631 \u0645\u0646\u0637\u0642 \u0627\u062a\u0635\u0627\u0644 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u062e\u06cc\u0644\u06cc \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0628\u0627\u0634\u062f\u060c \u0627\u0634\u06a9\u0627\u0644\u200c\u0632\u062f\u0627\u06cc\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0645\u06cc \u0633\u062e\u062a\u200c\u062a\u0631 \u062e\u0648\u0627\u0647\u062f \u0634\u062f.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u0631\u0627\u0647\u200c\u0647\u0627\u06cc \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc MVVM \u062f\u0631 \u067e\u0631\u0648\u0698\u0647<\/h2>\n\n\n\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0628\u062e\u0634 \u0627\u0632 \u0622\u0645\u0648\u0632\u0634 MVVM \u0628\u0647 \u0631\u0627\u0647\u200c\u0647\u0627\u06cc \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc MVVM \u0645\u06cc\u200c\u067e\u0631\u062f\u0627\u0632\u06cc\u0645. \u06f2 \u0631\u0627\u0647 \u0628\u0631\u0627\u06cc \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0627\u0644\u06af\u0648\u06cc \u0637\u0631\u0627\u062d\u06cc \u06cc\u0627 \u0645\u0639\u0645\u0627\u0631\u06cc MVVM \u062f\u0631 \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 DataBinding \u0645\u0646\u062a\u0634\u0631\u0634\u062f\u0647 \u062a\u0648\u0633\u0637 Google<\/li>\n\n\n\n<li>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0647\u0631 \u0627\u0628\u0632\u0627\u0631\u06cc \u0645\u0627\u0646\u0646\u062f RxJava \u0628\u0631\u0627\u06cc DataBinding.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u0627\u062a\u0635\u0627\u0644 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u06cc\u0627 DataBinding \u0628\u0631\u0627\u06cc \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc MVVM:<\/h3>\n\n\n\n<p>Google \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 Data Binding \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0645\u0646\u062a\u0634\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u0628\u0647 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f \u0627\u062c\u0632\u0627\u06cc \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0631\u0627 \u062f\u0631 \u0637\u0631\u062d\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627\u06cc XML \u0628\u0627 \u0645\u062e\u0627\u0632\u0646 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u062a\u0635\u0644 \u06a9\u0646\u0646\u062f. \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0647 \u062d\u062f\u0627\u0642\u0644 \u0631\u0633\u0627\u0646\u062f\u0646 \u06a9\u062f \u0645\u0646\u0637\u0642 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0635\u0644\u06cc \u06a9\u0647 \u0628\u0627 View \u0645\u062a\u0635\u0644 \u0645\u06cc\u200c\u0634\u0648\u062f \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646\u060c \u062f\u0648\u0637\u0631\u0641\u0647 Data Binding \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0627\u0634\u06cc\u0627\u0621 \u0628\u0647 \u0637\u0631\u062d\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627\u06cc XML \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u200c\u0634\u0648\u062f \u062a\u0627 \u0634\u06cc \u0648 \u0637\u0631\u062d\u200c\u0628\u0646\u062f\u06cc \u0647\u0631 \u062f\u0648 \u0628\u062a\u0648\u0627\u0646\u0646\u062f \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0627 \u0628\u0647 \u06cc\u06a9\u062f\u06cc\u06af\u0631 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u0646\u062f. \u0627\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u0631\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646 \u0628\u0627 \u0645\u062b\u0627\u0644 \u0627\u06cc\u0646 <strong>\u0622\u0645\u0648\u0632\u0634 MVVM<\/strong> \u0628\u0647 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0634\u06cc\u062f.<\/p>\n\n\n\n<p>Syntax for the two way data binding is @={variable}<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u0646\u0645\u0648\u0646\u0647\u200c\u0627\u06cc \u0627\u0632 \u0627\u0644\u06af\u0648\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc MVVM<\/h4>\n\n\n\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0627\u0632 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u06cc User-Login \u0628\u0631\u0627\u06cc \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0646 \u0627\u062c\u0631\u0627\u06cc \u0627\u0644\u06af\u0648\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc MVVM \u062f\u0631 \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627 \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a. \u062f\u0631 \u0627\u06cc\u0646 \u0628\u062e\u0634 \u0627\u0632 <strong>\u0622\u0645\u0648\u0632\u0634 MVVM<\/strong> \u0628\u0647 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0639\u0645\u0644\u06cc \u0627\u06cc\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc \u0645\u06cc\u200c\u067e\u0631\u062f\u0627\u0632\u06cc\u0645. \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u062f \u0634\u0646\u0627\u0633\u0647 \u0627\u06cc\u0645\u06cc\u0644 \u0648 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u062f. \u0628\u0631 \u0627\u0633\u0627\u0633 \u0648\u0631\u0648\u062f\u06cc\u200c\u0647\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0634\u062f\u0647\u060c ViewModel \u0628\u0647 View \u0627\u0637\u0644\u0627\u0639 \u0645\u06cc\u200c\u062f\u0647\u062f \u06a9\u0647 \u0686\u0647 \u0686\u06cc\u0632\u06cc \u0631\u0627 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u062a\u0633\u062a \u0646\u0634\u0627\u0646 \u062f\u0647\u062f. ViewModel \u0627\u0631\u062c\u0627\u0639\u06cc \u0628\u0647 View \u0646\u062e\u0648\u0627\u0647\u062f \u062f\u0627\u0634\u062a.<\/p>\n\n\n\n<p>\u0628\u0631\u0627\u06cc \u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0646 DataBinding \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u060c \u06a9\u062f\u0647\u0627\u06cc \u0632\u06cc\u0631 \u0628\u0627\u06cc\u062f \u062f\u0631 \u0641\u0627\u06cc\u0644 build.gradle(build.gradle (:app)) \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0636\u0627\u0641\u0647 \u0634\u0648\u0646\u062f:<\/p>\n\n\n\n<p class=\"has-text-align-left\">Enable DataBinding:<\/p>\n\n\n\n<p class=\"has-text-align-left\">android {<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp; dataBinding {<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; enabled = true<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p class=\"has-text-align-left\">}<\/p>\n\n\n\n<p class=\"has-text-align-right\">\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0686\u0631\u062e\u0647 \u0639\u0645\u0631:<\/p>\n\n\n\n<p class=\"has-text-align-left\">implementation \u2018android.arch.lifecycle:extensions:1.1.1\u2019<\/p>\n\n\n\n<p>\u062f\u0631 \u0632\u06cc\u0631 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0627\u0645\u0644 \u06af\u0627\u0645\u200c\u0628\u0647\u200c\u06af\u0627\u0645 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f User-Login \u0628\u0627 \u0627\u0644\u06af\u0648\u06cc MVVM \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u06af\u0627\u0645\u200c\u0628\u0647\u200c\u06af\u0627\u0645 MVVM<\/h3>\n\n\n\n<p>\u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0627\u0632 \u0622\u0645\u0648\u0632\u0634 MVVM \u0634\u0627\u0645\u0644 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f\u06cc \u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0633\u062a\u0648\u062f\u06cc\u0648 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u0639\u0645\u0627\u0631\u06cc MVVM \u0627\u0633\u062a.<\/p>\n\n\n\n<p>\u062a\u0648\u062c\u0647: \u0645\u0631\u0627\u062d\u0644 \u0632\u06cc\u0631 \u062f\u0631 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0633\u062a\u0648\u062f\u06cc\u0648 \u0646\u0633\u062e\u0647 \u06f4\u066b\u06f0 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u200c\u0634\u0648\u062f<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u0645\u0631\u062d\u0644\u0647 \u06f1: \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u062c\u062f\u06cc\u062f<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0631\u0648\u06cc File \u0648 \u0633\u067e\u0633 New => New Project \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f.<\/li>\n\n\n\n<li>\u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u062e\u0627\u0644\u06cc \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f<\/li>\n\n\n\n<li>\u0632\u0628\u0627\u0646 \u0631\u0627 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 Java\/Kotlin \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f<\/li>\n\n\n\n<li>\u062d\u062f\u0627\u0642\u0644 SDK \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0646\u06cc\u0627\u0632 \u062e\u0648\u062f \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ul>\n\n\n\n<p>\u0645\u0631\u062d\u0644\u0647 \u06f2: \u0641\u0627\u06cc\u0644 String.xml \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f<\/p>\n\n\n\n<p>\u062a\u0645\u0627\u0645 \u0631\u0634\u062a\u0647\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u062f\u0631 \u0627\u06a9\u062a\u06cc\u0648\u06cc\u062a\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u0646\u062f \u062f\u0631 \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0641\u0647\u0631\u0633\u062a \u0634\u062f\u0647\u200c\u0627\u0646\u062f.<\/p>\n\n\n\n<p><strong>\u0641\u0627\u06cc\u0644 <\/strong><strong>xml<\/strong><strong>:<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-left\">&lt;resources&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;string name=&#8221;app_name&#8221;&gt;GfG | MVVM Architecture&lt;\/string&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;string name=&#8221;heading&#8221;&gt;MVVM Architecture Pattern&lt;\/string&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;string name=&#8221;email_hint&#8221;&gt;Enter your Email ID&lt;\/string&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;string name=&#8221;password_hint&#8221;&gt;Enter your password&lt;\/string&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;string name=&#8221;button_text&#8221;&gt;Login&lt;\/string&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&lt;\/resources&gt;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u0645\u0631\u062d\u0644\u0647 \u06f3: \u0627\u06cc\u062c\u0627\u062f \u06a9\u0644\u0627\u0633 Model<\/h4>\n\n\n\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0627\u0632 <strong>\u0622\u0645\u0648\u0632\u0634 MVVM<\/strong>\u060c \u06cc\u06a9 \u06a9\u0644\u0627\u0633 \u062c\u062f\u06cc\u062f \u0628\u0647 \u0646\u0627\u0645 Model \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0634\u0646\u0627\u0633\u0647 \u0627\u06cc\u0645\u06cc\u0644 \u0648 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0648\u0627\u0631\u062f\u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u062f\u0631 \u0622\u0646 \u0646\u06af\u0647\u200c\u062f\u0627\u0631\u06cc\u062f. \u062f\u0631 \u0632\u06cc\u0631 \u06a9\u062f \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0644\u0627\u0633 Model \u0645\u0646\u0627\u0633\u0628 \u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"has-text-align-left\">import androidx.annotation.Nullable;<\/p>\n\n\n\n<p class=\"has-text-align-left\">public class Model {<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Nullable<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String email,password;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ constructor to initialize<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ the variables<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Model(String email, String password){<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.email = email;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.password = password;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ getter and setter methods<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ for email variable<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Nullable<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String getEmail() {<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return email;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setEmail(@Nullable String email) {<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.email = email;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ getter and setter methods<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ for password variable<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Nullable<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String getPassword() {<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return password;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setPassword(@Nullable String password) {<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.password = password;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p class=\"has-text-align-left\">}<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u0645\u0631\u062d\u0644\u0647 \u06f4: \u06a9\u0627\u0631 \u0628\u0627 \u0641\u0627\u06cc\u0644 activity_main.xml<\/h4>\n\n\n\n<p>\u0641\u0627\u06cc\u0644 activity_main.xml \u0631\u0627 \u0628\u0627\u0632\u06a9\u0646\u06cc\u062f \u0648 \u06f2 EditText \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0648\u0631\u0648\u062f\u06cc\u200c\u0647\u0627\u06cc \u0627\u06cc\u0645\u06cc\u0644 \u0648 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f. \u06cc\u06a9 \u062f\u06a9\u0645\u0647 \u0648\u0631\u0648\u062f \u0646\u06cc\u0632 \u0628\u0631\u0627\u06cc \u062a\u0627\u0626\u06cc\u062f \u0648\u0631\u0648\u062f\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0648 \u0646\u0645\u0627\u06cc\u0634 \u067e\u06cc\u0627\u0645 Toast \u0645\u0646\u0627\u0633\u0628 \u0645\u0648\u0631\u062f\u0646\u06cc\u0627\u0632 \u0627\u0633\u062a. \u062f\u0631 \u0632\u06cc\u0631 \u06a9\u062f \u0637\u0631\u0627\u062d\u06cc \u06cc\u06a9 \u0637\u0631\u062d \u0641\u0639\u0627\u0644\u06cc\u062a \u0645\u0646\u0627\u0633\u0628 \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n\n\n\n<p>\u062a\u0648\u062c\u0647: \u0628\u0631\u0627\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f \u0635\u062d\u06cc\u062d Data Binding Library\u060c \u0628\u0627\u06cc\u062f \u062a\u06af layout \u0631\u0627 \u062f\u0631 \u0628\u0627\u0644\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f. \u062a\u06af layout \u0645\u062d\u062f\u0648\u062f\u06cc\u062a XML \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0648\u0631\u062f \u06a9\u0627\u0631 \u0646\u062e\u0648\u0627\u0647\u062f \u06a9\u0631\u062f.<\/p>\n\n\n\n<p class=\"has-text-align-left\">&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&lt;layout xmlns:android=&#8221;http:\/\/schemas.android.com\/apk\/res\/android&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:app=&#8221;http:\/\/schemas.android.com\/apk\/res-auto&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:bind=&#8221;http:\/\/schemas.android.com\/tools&#8221;&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!&#8211; binding object of ViewModel to the XML layout &#8211;&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;data&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;variable<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name=&#8221;viewModel&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type=&#8221;com.example.mvvmarchitecture.AppViewModel&#8221; \/&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;\/data&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!&#8211; Provided Linear layout for the activity components &#8211;&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;LinearLayout<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_width=&#8221;match_parent&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_height=&#8221;match_parent&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_gravity=&#8221;center&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_margin=&#8221;8dp&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:background=&#8221;#168BC34A&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:orientation=&#8221;vertical&#8221;&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!&#8211; TextView for the heading of the activity &#8211;&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;TextView<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:id=&#8221;@+id\/textView&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_width=&#8221;match_parent&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_height=&#8221;wrap_content&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:text=&#8221;@string\/heading&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:textAlignment=&#8221;center&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:textColor=&#8221;@android:color\/holo_green_dark&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:textSize=&#8221;36sp&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:textStyle=&#8221;bold&#8221; \/&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!&#8211; EditText field for the Email &#8211;&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;EditText<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:id=&#8221;@+id\/inEmail&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_width=&#8221;match_parent&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_height=&#8221;wrap_content&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_marginStart=&#8221;10dp&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_marginTop=&#8221;60dp&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_marginEnd=&#8221;10dp&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_marginBottom=&#8221;20dp&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:hint=&#8221;@string\/email_hint&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:inputType=&#8221;textEmailAddress&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:padding=&#8221;8dp&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:text=&#8221;@={viewModel.userEmail}&#8221; \/&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!&#8211; EditText field for the password &#8211;&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;EditText<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:id=&#8221;@+id\/inPassword&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_width=&#8221;match_parent&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_height=&#8221;wrap_content&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_marginStart=&#8221;10dp&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_marginEnd=&#8221;10dp&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:hint=&#8221;@string\/password_hint&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:inputType=&#8221;textPassword&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:padding=&#8221;8dp&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:text=&#8221;@={viewModel.userPassword}&#8221; \/&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!&#8211; Login Button of the activity &#8211;&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Button<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_width=&#8221;match_parent&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_height=&#8221;wrap_content&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_marginStart=&#8221;20dp&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_marginTop=&#8221;60dp&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_marginEnd=&#8221;20dp&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:background=&#8221;#4CAF50&#8243;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:fontFamily=&#8221;@font\/roboto&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:onClick=&#8221;@{()-&gt; viewModel.onButtonClicked()}&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:text=&#8221;@string\/button_text&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:textColor=&#8221;@android:color\/background_light&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:textSize=&#8221;30sp&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:textStyle=&#8221;bold&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bind:toastMessage=&#8221;@{viewModel.toastMessage}&#8221; \/&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ImageView<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:id=&#8221;@+id\/imageView&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_width=&#8221;match_parent&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_height=&#8221;wrap_content&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:layout_marginTop=&#8221;135dp&#8221;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; app:srcCompat=&#8221;@drawable\/banner&#8221; \/&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;\/LinearLayout&gt;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&lt;\/layout&gt;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u0645\u0631\u062d\u0644\u0647 \u06f5: \u0627\u06cc\u062c\u0627\u062f \u06a9\u0644\u0627\u0633 ViewModel<\/h4>\n\n\n\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0627\u0632 <strong>\u0622\u0645\u0648\u0632\u0634 MVVM<\/strong> \u0628\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0644\u0627\u0633 ViewModel \u0645\u06cc\u200c\u067e\u0631\u062f\u0627\u0632\u06cc\u0645. \u0627\u06cc\u0646 \u06a9\u0644\u0627\u0633 \u0634\u0627\u0645\u0644 \u062a\u0645\u0627\u0645 \u0645\u062a\u062f\u0647\u0627\u06cc\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u062f\u0631 \u0637\u0631\u062d \u0628\u0631\u0646\u0627\u0645\u0647 \u0644\u0627\u0632\u0645 \u0627\u0633\u062a. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0627\u06cc\u0646 \u06a9\u0644\u0627\u0633\u060c \u06a9\u0644\u0627\u0633 ViewModel BaseObservable \u0631\u0627 \u06af\u0633\u062a\u0631\u0634 \u0645\u06cc\u200c\u062f\u0647\u062f \u0632\u06cc\u0631\u0627 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0627 \u0628\u0647 \u062c\u0631\u06cc\u0627\u0646 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u0647\u0646\u06af\u0627\u0645 \u062a\u063a\u06cc\u06cc\u0631 \u0648\u06cc\u0698\u06af\u06cc \u067e\u06cc\u0627\u0645 toast \u0628\u0647 View \u0627\u0637\u0644\u0627\u0639 \u0645\u06cc\u200c\u062f\u0647\u062f.<\/p>\n\n\n\n<p class=\"has-text-align-left\">import android.text.TextUtils;<\/p>\n\n\n\n<p class=\"has-text-align-left\">import android.util.Patterns;<\/p>\n\n\n\n<p class=\"has-text-align-left\">import androidx.databinding.BaseObservable;<\/p>\n\n\n\n<p class=\"has-text-align-left\">import androidx.databinding.Bindable;<\/p>\n\n\n\n<p class=\"has-text-align-left\">public class AppViewModel extends BaseObservable {<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ creating object of Model class<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private Model model;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ string variables for<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ toast messages<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private String successMessage = &#8220;Login successful&#8221;;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private String errorMessage = &#8220;Email or Password is not valid&#8221;;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Bindable<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ string variable for<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ toast message<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private String toastMessage = null;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ getter and setter methods<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ for toast message<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String getToastMessage() {<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return toastMessage;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void setToastMessage(String toastMessage) {<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.toastMessage = toastMessage;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; notifyPropertyChanged(BR.toastMessage);<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ getter and setter methods<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ for email variable<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Bindable<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String getUserEmail() {<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return model.getEmail();<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setUserEmail(String email) {<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; model.setEmail(email);<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; notifyPropertyChanged(BR.userEmail);<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ getter and setter methods<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ for password variable<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Bindable<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String getUserPassword() {<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return model.getPassword();<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setUserPassword(String password) {<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; model.setPassword(password);<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; notifyPropertyChanged(BR.userPassword);<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ constructor of ViewModel class<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public AppViewModel() {<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ instantiating object of<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ model class<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; model = new Model(&#8220;&#8221;,&#8221;&#8221;);<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ actions to be performed<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ when user clicks<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ the LOGIN button<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void onButtonClicked() {<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (isValid())<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setToastMessage(successMessage);<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setToastMessage(errorMessage);<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ method to keep a check<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ that variable fields must<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ not be kept empty by user<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public boolean isValid() {<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return !TextUtils.isEmpty(getUserEmail()) &amp;&amp; Patterns.EMAIL_ADDRESS.matcher(getUserEmail()).matches()<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; getUserPassword().length() &gt; 5;<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p class=\"has-text-align-left\">}<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0645\u0631\u062d\u0644\u0647 \u06f6: \u0642\u0627\u0628\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc View \u0631\u0627 \u062f\u0631 \u0641\u0627\u06cc\u0644 MainActivity \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f<\/h3>\n\n\n\n<p>\u06a9\u0644\u0627\u0633 View \u0645\u0633\u0626\u0648\u0644 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc UI \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a. \u0628\u0627 \u062a\u0648\u062c\u0647 \u0628\u0647 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062f\u0631 \u067e\u06cc\u0627\u0645 \u0646\u0627\u0646 \u062a\u0633\u062a \u0627\u0631\u0627\u0626\u0647\u200c\u0634\u062f\u0647 \u062a\u0648\u0633\u0637 ViewModel\u060c \u0622\u062f\u0627\u067e\u062a\u0648\u0631 Binding \u0644\u0627\u06cc\u0647 View \u0631\u0627 \u0641\u0639\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u062a\u0646\u0638\u06cc\u0645\u200c\u06a9\u0646\u0646\u062f\u0647 \u067e\u06cc\u0627\u0645 Toast \u0628\u0647 \u0645\u0634\u0627\u0647\u062f\u0647\u200c\u06a9\u0646\u0646\u062f\u0647 (View) \u062f\u0631 \u0645\u0648\u0631\u062f \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0627\u0637\u0644\u0627\u0639 \u0645\u06cc\u200c\u062f\u0647\u062f. \u067e\u0633\u200c\u0627\u0632\u0622\u0646\u060c View \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0645\u0646\u0627\u0633\u0628 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062e\u0648\u0627\u0647\u062f \u062f\u0627\u062f.<\/p>\n\n\n\n<p class=\"has-text-align-left\">import android.os.Bundle;<\/p>\n\n\n\n<p class=\"has-text-align-left\">import android.view.View;<\/p>\n\n\n\n<p class=\"has-text-align-left\">import android.widget.Toast;<\/p>\n\n\n\n<p class=\"has-text-align-left\">import androidx.appcompat.app.AppCompatActivity;<\/p>\n\n\n\n<p class=\"has-text-align-left\">import androidx.databinding.BindingAdapter;<\/p>\n\n\n\n<p class=\"has-text-align-left\">import androidx.databinding.DataBindingUtil;<\/p>\n\n\n\n<p class=\"has-text-align-left\">import com.example.mvvmarchitecture.databinding.ActivityMainBinding;<\/p>\n\n\n\n<p class=\"has-text-align-left\">public class MainActivity extends AppCompatActivity {<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Override<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected void onCreate(Bundle savedInstanceState) {<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.onCreate(savedInstanceState);<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ ViewModel updates the Model<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ after observing changes in the View<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ model will also update the view<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ via the ViewModel<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; activityMainBinding.setViewModel(new AppViewModel());<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; activityMainBinding.executePendingBindings();<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ any change in toastMessage attribute<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ defined on the Button with bind prefix<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ invokes this method<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @BindingAdapter({&#8220;toastMessage&#8221;})<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void runMe( View view, String message) {<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (message != null)<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Toast.makeText(view.getContext(), message, Toast.LENGTH_SHORT).show();<\/p>\n\n\n\n<p class=\"has-text-align-left\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p class=\"has-text-align-left\">}<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u062e\u0631\u0648\u062c\u06cc \u0628\u0631\u0646\u0627\u0645\u0647:<\/h3>\n\n\n\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0627\u0632 <strong>\u0622\u0645\u0648\u0632\u0634 MVVM<\/strong> \u062f\u0631 \u0645\u062d\u06cc\u0637 \u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0633\u062a\u0648\u062f\u06cc\u0648 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0631\u0648\u062c\u06cc \u0645\u06cc\u200c\u06af\u06cc\u0631\u06cc\u0645 \u06a9\u0647 \u0645\u0637\u0627\u0628\u0642 \u0648\u06cc\u062f\u06cc\u0648\u06cc \u06a9\u0648\u062a\u0627\u0647 \u0632\u06cc\u0631 \u0627\u0633\u062a.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img decoding=\"async\" width=\"800\" height=\"580\" data-src=\"https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2021\/11\/Untitled-1.jpg\" alt=\"\u062e\u0631\u0648\u062c\u06cc \u067e\u0631\u0648\u0698\u0647 MVVM\" class=\"wp-image-27548 lazyload\" title=\"\" data-srcset=\"https:\/\/maktabkhooneh.org\/mag\/wp-content\/uploads\/2021\/11\/Untitled-1.jpg 800w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/smush-webp\/2021\/11\/Untitled-1-300x218.jpg.webp 300w, https:\/\/maktabkhooneh.org\/mag\/wp-content\/smush-webp\/2021\/11\/Untitled-1-768x557.jpg.webp 768w\" data-sizes=\"(max-width: 800px) 100vw, 800px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 800px; --smush-placeholder-aspect-ratio: 800\/580;\" \/><figcaption><\/figcaption><\/figure>\n\n\n","protected":false},"excerpt":{"rendered":"<p>\u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u0627 MVVM Model \u2014 View \u2014 ViewModel (MVVM) \u0627\u0644\u06af\u0648\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631 \u0634\u0646\u0627\u062e\u062a\u0647\u200c\u0634\u062f\u0647 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u06cc&nbsp;\u0627\u0646\u062f\u0631\u0648\u06cc\u062f \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631 \u062a\u0645\u0627\u0645 \u0627\u0634\u06a9\u0627\u0644\u0627\u062a \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0637\u0631\u0627\u062d\u06cc MVP \u0648 MVC \u063a\u0644\u0628\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f. MVVM \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u0645\u0646\u0637\u0642 \u0627\u0631\u0627\u0626\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 Views \u06cc\u0627 UI \u0631\u0627 \u0627\u0632 \u0628\u062e\u0634 \u0645\u0646\u0637\u0642 \u062a\u062c\u0627\u0631\u06cc \u0627\u0635\u0644\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u062f\u0627 \u06a9\u0646\u06cc\u062f. \u062f\u0631 \u0627\u062f\u0627\u0645\u0647 \u0628\u0627 \u0645\u0639\u0645\u0627\u0631\u06cc MVVM \u0628\u0647\u200c\u062e\u0648\u0628\u06cc \u0622\u0634\u0646\u0627 \u0645\u06cc\u200c\u0634\u0648\u06cc\u0645 \u0648 [&hellip;]<\/p>\n","protected":false},"author":35,"featured_media":27551,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,8],"tags":[],"class_list":["post-27538","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programming-and-it-training","category-mobile-programming-articles"],"_links":{"self":[{"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/posts\/27538","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/comments?post=27538"}],"version-history":[{"count":2,"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/posts\/27538\/revisions"}],"predecessor-version":[{"id":66337,"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/posts\/27538\/revisions\/66337"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/media\/27551"}],"wp:attachment":[{"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/media?parent=27538"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/categories?post=27538"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maktabkhooneh.org\/mag\/wp-json\/wp\/v2\/tags?post=27538"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}