{"id":19977,"date":"2019-10-18T18:43:37","date_gmt":"2019-10-18T09:43:37","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=19977"},"modified":"2019-10-19T11:13:13","modified_gmt":"2019-10-19T02:13:13","slug":"viewstub-%ed%99%9c%ec%9a%a9%ec%9c%bc%eb%a1%9c-%ec%84%b1%eb%8a%a5-%eb%86%92%ec%9d%b4%ea%b8%b0","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=19977","title":{"rendered":"ViewStub \ud65c\uc6a9\uc73c\ub85c \uc131\ub2a5 \ub192\uc774\uae30"},"content":{"rendered":"<h1>ViewStub\uc774\ub780?<\/h1>\n<p>ViewStub\uc740 \uc0ac\uc774\uc988\uac00 \uc5c6\ub294 \ubcf4\uc774\uc9c0 \uc54a\ub294 \ubdf0\ub85c \ub7f0\ud0c0\uc784\uc5d0\uc11c \ub2a6\uc740 \uc804\uac1c(lazy-inflate)\ub97c \uc6d0\ud560 \ub54c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4. ViewStub\uc744 \ubcf4\uc774\uac8c \ub9cc\ub4e4\uac70\ub098 inflate() \uba54\uc11c\ub4dc\ub97c \ud638\ucd9c\ud558\uba74 \ub808\uc774\uc544\uc6c3\uc774 \uc804\uac1c\ub418\uba74\uc11c ViewStub\uc744 \ub300\uccb4\ud558\uae30 \ub54c\ubb38\uc5d0 ViewStub\uc740 \uc0ac\ub77c\uc9c4\ub2e4. \uc804\uac1c\ub41c \ubdf0\ub294 ViewStub\uc758 \ubd80\ubaa8 \ubdf0\uc5d0 \ucd94\uac00 \ub41c\ub2e4. \ub808\uc774\uc544\uc6c3\uc5d0\uc11c ViewStub\uc744 \uc0ac\uc6a9\ud558\ub294 \uc608\uc81c\ub97c \ud655\uc778\ud558\uc790.<\/p>\n<pre class=\"\"><span style=\"font-weight: 400;\">&lt;ViewStub <\/span><span style=\"font-weight: 400;\">android:id<\/span><span style=\"font-weight: 400;\">=<\/span><span style=\"font-weight: 400;\">\"@+id\/stub\"<\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span><span style=\"font-weight: 400;\">android:inflatedId<\/span><span style=\"font-weight: 400;\">=<\/span><span style=\"font-weight: 400;\">\"@+id\/subTree\"<\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span><span style=\"font-weight: 400;\">android:layout<\/span><span style=\"font-weight: 400;\">=<\/span><span style=\"font-weight: 400;\">\"@layout\/mySubTree\"<\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span><span style=\"font-weight: 400;\">android:layout_width<\/span><span style=\"font-weight: 400;\">=<\/span><span style=\"font-weight: 400;\">\"120dp\"<\/span><span style=\"font-weight: 400;\">\r\n<\/span><span style=\"font-weight: 400;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span><span style=\"font-weight: 400;\">android:layout_height<\/span><span style=\"font-weight: 400;\">=<\/span><span style=\"font-weight: 400;\">\"40dp\"<\/span><span style=\"font-weight: 400;\"> \/&gt;<\/span><\/pre>\n<p>findViewById() \ud638\ucd9c\uc744 \ud1b5\ud574 ViewStub\uc5d0 \uc811\uadfc\ud560 \uc218 \uc788\ub2e4.<\/p>\n<pre class=\"\"><span style=\"font-weight: 400;\">ViewStub viewStub = findViewById(R.id.stub);<\/span><\/pre>\n<p>\uc0dd\uc131\ub418\ub294 \ubc14\uc778\ub529 \ud074\ub798\uc2a4\uc5d0\uc11c ViewStub\uc740 ViewStubProxy\ub85c \ud45c\ud604\ub418\uba70, ViewStub\uc5d0 \ub300\ud574 \uc811\uadfc\ud560 \uc218 \uc788\uac8c \ud574\uc900\ub2e4.<\/p>\n<pre class=\"\">ActivityMainBinding binding = ...\r\nViewStubProxy viewStubProxy = binding.stub;\r\nViewStub viewStub = viewStubProxy.getViewStub();<\/pre>\n<p>ViewStub\uc5d0 \uc9c0\uc815\ub41c \ub808\uc774\uc544\uc6c3\uc744 \uc804\uac1c \uc2dc\ud0a4\uae30 \uc704\ud574\uc11c \uc11c\ub294 setVisibility() \ub610\ub294 inflate()\ub97c \ud638\ucd9c \ud560 \uc218 \uc788\ub2e4.<\/p>\n<pre class=\"\">ViewStub viewStub = ...\r\nviewStub.inflate(); \r\n\/\/\ub610\ub294 viewStub.setVisibility(View.VISIBLE);<\/pre>\n<p>ViewStub\uc740 \ubcf5\uc7a1\ud558\uac8c \uad6c\uc131\ub41c \ub808\uc774\uc544\uc6c3\uc744 \ube60\ub974\uac8c \uc804\uac1c\uc2dc\ucf1c\uc57c\ud558\ub294 \uc0c1\ud669\uc5d0\uc11c, \ub808\uc774\uc544\uc6c3\uc758 \uc804\uac1c \uc2dc\uae30\ub97c \uc120\ud0dd\uc801\uc73c\ub85c \ub2a6\ucd9c \uc218 \uc788\ub2e4. \uc608\ub97c \ub4e4\uc5b4 \ub9ac\uc2a4\ud2b8 \ud615\ud0dc\uc758 UI\ub97c \uad6c\uc131\ud558\uace0 \ud558\ub098\uc758 \ubdf0\ud640\ub354\uac00 \uc804\uac1c \ub418\ub294\ub370 \uc0c1\ub2f9\ud55c \ube44\uc6a9\uc774 \ubc1c\uc0dd\ud55c\ub2e4\uace0 \uac00\uc815\ud558\uc790. \uc774 \ub54c \uc0ac\uc6a9\uc790\uac00 \ube60\ub974\uac8c \ud654\uba74\uc744 \uc2a4\ud06c\ub864 \ud560 \uacbd\uc6b0 \ud504\ub808\uc784 \ub4dc\ub78d\uc774 \ubc1c\uc0dd \ud560 \uc218 \uc788\ub2e4. \uc774\ub7f4 \ub54c \uc120\ud0dd\uc801\uc73c\ub85c \ubd88\ud544\uc694\ud55c \ub808\uc774\uc544\uc6c3\uc758 \uc804\uac1c\ub97c \uc81c\uc5b4\ud558\uace0 \uc804\uac1c \uc2dc\uae30\ub97c \ub2a6\ucda4\uc73c\ub85c\uc368 \uc131\ub2a5\uc744 \uac1c\uc120\uc2dc\ud0ac \uc218 \uc788\ub2e4.<\/p>\n<h2>ViewStub\uacfc \ubc14\uc778\ub529 \uc5b4\ub311\ud130<\/h2>\n<p>\ub9cc\uc57d ViewStub\uc5d0 \uc9c0\uc815\ub41c \ub808\uc774\uc544\uc6c3\uc774 \uc804\uac1c\ub41c \uc0c1\ud0dc(inflated)\ub77c\uba74 <strong>app:user=&#8221;@{user}&#8221;<\/strong>\uc640 \uac19\uc740 \ubc14\uc778\ub529 \ud45c\ud604\uc2dd\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.\u00a0<span><\/span><\/p>\n<p>ViewStub\uacfc \ubc14\uc778\ub529 \ud45c\ud604\uc2dd\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 ViewStub\uc5d0 \ubc18\ub4dc\uc2dc \uc544\uc774\ub514\ub97c \uc120\uc5b8\ud574\uc57c\ud55c\ub2e4.<\/p>\n<pre class=\"lang:xhtml decode:true\" title=\"activity_user.xml\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;!--activity_user.xml--&gt;\r\n&lt;layout xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\r\n    xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"&gt;\r\n\r\n    &lt;data&gt;\r\n        &lt;variable\r\n            name=\"user\"\r\n            type=\"com.charlezz.jetpacklibrarysample.User\" \/&gt;\r\n\r\n    &lt;\/data&gt;\r\n\r\n    &lt;LinearLayout\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\"\r\n        android:orientation=\"vertical\"&gt;\r\n\r\n&lt;!--        id\ubc18\ub4dc\uc2dc \uc788\uc5b4\uc57c\ud568--&gt;\r\n        &lt;ViewStub\r\n            android:id=\"@+id\/user_view_stub\"\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"match_parent\"\r\n            android:layout=\"@layout\/view_user\"\r\n            app:user=\"@{user}\" \/&gt;\r\n\r\n    &lt;\/LinearLayout&gt;\r\n\r\n&lt;\/layout&gt;\r\n<\/pre>\n<pre class=\"lang:java decode:true\" title=\"view_user.xml\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;!--view_user.xml--&gt;\r\n&lt;layout&gt;\r\n\r\n    &lt;data&gt;\r\n\r\n        &lt;variable\r\n            name=\"user\"\r\n            type=\"com.charlezz.jetpacklibrarysample.User\" \/&gt;\r\n    &lt;\/data&gt;\r\n\r\n    &lt;LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n        xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\"\r\n        android:orientation=\"vertical\"&gt;\r\n       \r\n        &lt;!--user \ub370\uc774\ud130\uc640 \ubdf0\ub97c \ubc14\uc778\ub529 --&gt;\r\n        ...\r\n\r\n    &lt;\/LinearLayout&gt;\r\n\r\n&lt;\/layout&gt;<\/pre>\n<p>\uc0dd\uc131\ub418\ub294 ActivityUserBindingImpl \ub0b4\ubd80 \ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubcf4\uba74, \uc804\uac1c\ub418\uc9c0 \uc54a\uc740 ViewStub\uc774\ub77c\uba74 \ubc14\uc778\ub529 \ud45c\ud604\uc2dd\uc774 \uc801\uc6a9\ub418\uc9c0 \uc54a\ub3c4\ub85d \ub9c9\uc544\ub450\uc5c8\ub2e4. \uc544\ub9c8 \uc804\uac1c \ub418\uc9c0 \uc54a\uc740 \ubc14\uc778\ub529 \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc811\uadfc\ud558\ub824\ud558\uba74 NPE\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc5d0 \uc0ac\uc804\uc5d0 \ub9c9\uc740 \ub4ef \ud558\ub2e4.<\/p>\n<pre class=\"lang:java mark:6 decode:true\">@Override\r\nprotected void executeBindings() {\r\n    ...\r\n        if (this.userViewStub.isInflated()) \r\n            this.userViewStub.getBinding().setVariable(BR.user, user);\r\n    ...\r\n}<\/pre>\n<p>\uc804\uac1c\ub418\uc9c0 \uc54a\uc740 ViewStub\uc5d0\ub294 \ubc14\uc778\ub529 \ud45c\ud604\uc2dd\uc774 \uc801\uc6a9\ub418\uc9c0 \uc54a\ub294 \ub2e4\ub294\uac83\uc744 \uc54c\uc558\uc73c\ub2c8, ViewStub\uc744 \uc804\uac1c\ud558\ub294 \uc791\uc5c5\uc744 \uc6b0\uc120\uc801\uc73c\ub85c \ud574\ubcf4\uc790. inflate()\ub97c \ud638\ucd9c\ud574\ub3c4 \ub418\uc9c0\ub9cc android:visibility \uc18d\uc131\uc744 \uc774\uc6a9\ud55c \ubc14\uc778\ub529 \ud45c\ud604\uc2dd\uc73c\ub85c \uc804\uac1c\ub97c \ud560 \uc218 \uc788\ub2e4. \ub0b4\ubd80\uc801\uc73c\ub85c\ub294\u00a0 View.setVisibility(int)\uac00 \ud638\ucd9c \ub420\uac83\uc774\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;!--activity_user.xml--&gt;\r\n&lt;layout xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\r\n    xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"&gt;\r\n\r\n    &lt;data&gt;\r\n        &lt;import type=\"android.view.View\"\/&gt;\r\n        &lt;variable\r\n            name=\"user\"\r\n            type=\"com.charlezz.jetpacklibrarysample.User\" \/&gt;\r\n\r\n    &lt;\/data&gt;\r\n\r\n    &lt;LinearLayout\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\"\r\n        android:orientation=\"vertical\"&gt;\r\n\r\n&lt;!--        id\ubc18\ub4dc\uc2dc \uc788\uc5b4\uc57c\ud568--&gt;\r\n        &lt;ViewStub\r\n            android:id=\"@+id\/user_view_stub\"\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"match_parent\"\r\n            android:layout=\"@layout\/view_user\"\r\n            android:visibility=\"@{user==null ? View.GONE : View.VISIBLE}\"\r\n            app:user=\"@{user}\" \/&gt;\r\n\r\n    &lt;\/LinearLayout&gt;\r\n\r\n&lt;\/layout&gt;\r\n<\/pre>\n<p>\ub808\uc774\uc544\uc6c3\ub0b4\uc5d0\uc11c View\ub97c \ucc38\uc870\ud558\uace0\u00a0<br \/>\nandroid:visibility=&#8221;@{user==null ? View.GONE : View.VISIBLE}&#8221; \ubc14\uc778\ub529 \ud45c\ud604\uc2dd\uc73c\ub85c User \ub370\uc774\ud130\uac00 null\uc774 \uc544\ub2c8\uba74 \uc804\uac1c\ub97c \ud55c \ub4a4 \ubc14\uc778\ub529\uc744 \ud558\ub3c4\ub85d \ucf54\ub4dc\ub97c \uace0\ucce4\ub2e4. \ub2e4\uc2dc\ud55c\ubc88 ActivityUserBindingImpl\ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubcf4\uc790.<\/p>\n<pre class=\"lang:java decode:true\">@Override\r\nprotected void executeBindings() {\r\n    ...\r\n        if (!this.userViewStub.isInflated()) \r\n            this.userViewStub.getViewStub()\r\n                    .setVisibility(userJavaLangObjectNullViewGONEViewVISIBLE);\r\n        if (this.userViewStub.isInflated()) \r\n            this.userViewStub.getBinding().setVariable(BR.user, user);\r\n    ...\r\n}<\/pre>\n<p>\uc55e\uc758 \ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubcf4\uba74 ViewStub\uc73c\ub85c\ubd80\ud130 \ub808\uc774\uc544\uc6c3 \uc804\uac1c\ub97c \uba3c\uc800\ud558\uace0 user \ub370\uc774\ud130\ub97c \ubc14\uc778\ub529 \ud558\ub294 \uac83\uc744 \ud655\uc778 \ud560 \uc218 \uc788\ub2e4.<\/p>\n<p>\ud558\uc9c0\ub9cc \uc5ec\uae30\uc11c \ubb38\uc81c\uac00 \ud558\ub098 \uc788\ub2e4.<\/p>\n<p>\ub808\uc774\uc544\uc6c3\uc744 \uc804\uac1c\ud558\ub294 setVisibility()\uc740 ViewStub\uc774 \uc804\uac1c\ub418\uc9c0 \uc54a\uc558\uc744\ub54c\ub9cc \ud638\ucd9c\ub418\ub294 \uac83\uc774\ub2e4. \uadf8\ub807\uae30 \ub54c\ubb38\uc5d0 \ub808\uc774\uc544\uc6c3\uc744 \ub3d9\uc801\uc73c\ub85c \uc228\uae30\uace0 \uc2f6\uc744\ub54c\ub294 \ubc14\uc778\ub529 \ud45c\ud604\uc2dd\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uac8c \ub41c\ub2e4.<\/p>\n<p>\uc774\ub97c \ud574\uacb0\ud558\ub294 \ubc29\ubc95\uc73c\ub85c \uc0ac\uc6a9\uc790 \uc815\uc758 \ubc14\uc778\ub529\uc774 \uc788\ub2e4.\u00a0<\/p>\n<p>\ub2e4\uc74c\uacfc \uac19\uc774 User \ub370\uc774\ud130\ub97c \ubc14\uc778\ub529 \uc2dc\ud0a4\uae30 \uc704\ud55c \ubc14\uc778\ub529 \uc5b4\ub311\ud130\ub97c \uc120\uc5b8\ud560 \uc218 \uc788\ub2e4. User \ub370\uc774\ud130\uac00 \uc788\ub2e4\uba74 ViewStub\uc758 \ub808\uc774\uc544\uc6c3\uc744 \uc804\uac1c\uc2dc\ud0a4\uace0 \ub370\uc774\ud130\ub97c \ubc14\uc778\ub529\ud55c\ub2e4. User \ub370\uc774\ud130\uac00 \uc5c6\ub2e4\uba74 \ud544\uc694\uc5d0 \ub530\ub77c \uc774\ubbf8 \uc804\uac1c\ub41c \ub808\uc774\uc544\uc6c3\uc744 \uac10\ucd9c \uc218\ub3c4 \uc788\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">public class UserBindingAdapter {\r\n\r\n    @BindingAdapter(value = {\"user\", \"\"}, requireAll = false)\r\n    public static void setUser(View view, User user, Void nothing){\r\n        \/\/nothing to do\r\n    }\r\n\r\n    public static void setUser(ViewStubProxy proxy, User user, Void nothing){\r\n        if(proxy.getViewStub()!=null){  \r\n            if(user !=null){ \r\n                \/\/User \uc815\ubcf4\uac00 \uc788\ub2e4\uba74 \ub808\uc774\uc544\uc6c3\uc744 \uc804\uac1c\ud558\uace0 \ub370\uc774\ud130\ub97c \ubdf0\uc5d0 \ubc14\uc778\ub529 \ud55c\ub2e4.\r\n                proxy.getViewStub().setVisibility(View.VISIBLE); \r\n                proxy.getBinding().setVariable(BR.user, user); \r\n                proxy.getBinding().executePendingBindings();\r\n            }else{\r\n                \/\/ \ub808\uc774\uc544\uc6c3\uc774 \uc804\uac1c\ub41c\uc801 \uc788\uc9c0\ub9cc User \uc815\ubcf4\uac00 \uc5c6\uc744\ub54c \ub808\uc774\uc544\uc6c3\uc744 \uac10\ucd98\ub2e4. \r\n                proxy.getBinding().setVariable(BR.user, null); \r\n                proxy.getBinding().getRoot().setVisibility(View.GONE);\r\n            }\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<p>\ubc14\uc778\ub529 \uc5b4\ub311\ud130\uc758 \uc815\uc758\uac00 \ub05d\ub0ac\ub2e4\uba74 \ub808\uc774\uc544\uc6c3\uc5d0\uc11c\ub294 user \uc18d\uc131\uc744 \uc774\uc6a9\ud55c \ubc14\uc778\ub529 \ud45c\ud604\uc2dd\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ub41c\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;!--activity_user.xml--&gt;\r\n&lt;layout xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\r\n    xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"&gt;\r\n\r\n    &lt;data&gt;\r\n        &lt;import type=\"android.view.View\"\/&gt;\r\n        &lt;variable\r\n            name=\"user\"\r\n            type=\"com.charlezz.jetpacklibrarysample.User\" \/&gt;\r\n\r\n    &lt;\/data&gt;\r\n\r\n    &lt;LinearLayout\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\"\r\n        android:orientation=\"vertical\"&gt;\r\n\r\n&lt;!--        id\ubc18\ub4dc\uc2dc \uc788\uc5b4\uc57c\ud568--&gt;\r\n        &lt;ViewStub\r\n            android:id=\"@+id\/user_view_stub\"\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"match_parent\"\r\n            android:layout=\"@layout\/view_user\"\r\n            app:user=\"@{user}\" \/&gt;\r\n\r\n    &lt;\/LinearLayout&gt;\r\n\r\n&lt;\/layout&gt;<\/pre>\n<p>ViewStub\uacfc \uc0ac\uc6a9\uc790 \uc815\uc758 \ubc14\uc778\ub529 \uc0ac\uc6a9\uc2dc \uc8fc\uc758\ud574\uc57c\ud560 \uc810\uc774 \uc788\ub2e4.\u00a0<\/p>\n<p>\ub808\uc774\uc544\uc6c3\uc5d0 \uc120\uc5b8\ub41c ViewStub\uc740 ViewStubProxy\ub85c \ud45c\ud604\ub41c\ub2e4. \uadf8\ub807\uae30 \ub54c\ubb38\uc5d0 @BindingAdapter \uba54\uc11c\ub4dc\ub97c \ub9cc\ub4e4 \ub54c \uccab\ubc88\uc9f8 \ub9e4\uac1c\ubcc0\uc218\ub85c View\ub97c \uc9c0\uc815\ud558\ub354\ub77c\ub3c4 \ubc14\uc778\ub529 \ud074\ub798\uc2a4\uc5d0\uc11c\ub294 ViewStubProxy\ub97c \ud638\ucd9c\ud558\uae30 \ub54c\ubb38\uc5d0 \uc774\ub97c \uc704\ud55c \uc815\uc801 \uba54\uc11c\ub4dc\ub97c \ud558\ub098 \ub354 \ub9cc\ub4e4\uc5b4\uc57c \ud55c\ub2e4. @BindingAdapter \uba54\uc11c\ub4dc\uc758 \uccab\ubc88\uc9f8 \ub9e4\uac1c\ubcc0\uc218\ub294 \ubc18\ub4dc\uc2dc View\uc5ec\uc57c \ud558\ub294 \uc81c\uc57d\uc870\uac74\uc73c\ub85c \uc778\ud574 ViewStubProxy\ub97c \uccab\ubc88\uc9f8 \ub9e4\uac1c\ubcc0\uc218\ub85c \ud558\ub294 @BindingAdapter \uba54\uc11c\ub4dc\ub97c \uc815\uc758\ud560 \uc218\ub294 \uc5c6\ub2e4.<\/p>\n<p>BindingAdapter\uc758 \uc18d\uc131\uc774 1\uac1c\uc77c \ub54c(user)\ub294 \ucc98\uc74c \ub2e4\ub8e8\uc5c8\ub358 \uc608\uc81c\uc640 \ub9c8\ucc2c\uac00\uc9c0\ub85c, \ub808\uc774\uc544\uc6c3\uc774 \uc804\uac1c\ub418\uc5c8\uc744 \ub54c\ub9cc \ubc14\uc778\ub529 \uc218\ud589\ud558\ub294 \ucf54\ub4dc\uac00 \ubc14\uc778\ub529\ud074\ub798\uc2a4\uc5d0 \uc0dd\uc131\ub41c\ub2e4. \uadf8\ub7ec\ubbc0\ub85c \ubc18\ub4dc\uc2dc 2\uac1c\uc774\uc0c1\uc758 \ub9e4\uac1c\ubcc0\uc218\ub97c \uac00\uc838\uc57c \ud558\uae30 \ub54c\ubb38\uc5d0 \ub354\ubbf8 \ubcc0\uc218\ub97c \ud558\ub098 \ub354 \ucd94\uac00\ud558\uace0, requireAll\u00a0 \uc18d\uc131\uc744 false\ub85c \uc9c0\uc815 \ud55c\ub2e4.<\/p>\n<p>@BindingAdapter \uba54\uc11c\ub4dc\ub97c \uc62c\ubc14\ub974\uac8c \uc815\uc758\ud588\ub2e4\uba74, ActivityUserBindingImpl \ud074\ub798\uc2a4\uc758 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc0dd\uc131\ub41c\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">@Override\r\nprotected void executeBindings() {\r\n   ...\r\n        com.charlezz.jetpacklibrarysample.UserBindingAdapter\r\n            .setUser(this.userViewStub, user, (java.lang.Void)null);\r\n   ...\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<h1>TL;DR<\/h1>\n<p>ViewStub\uc744 \uc0ac\uc6a9\ud558\uba74 \ubd88\ud544\uc694\ud55c \ub808\uc774\uc544\uc6c3\uc758 \uc804\uac1c\ub97c \ub9c9\uc744 \uc218 \uc788\uae30 \ub54c\ubb38\uc5d0, \ubcf5\uc7a1\ud55c \ub808\uc774\uc544\uc6c3\uc744 \ud3ec\ud568\ud558\ub294 RecyclerView \ub4f1\uc5d0\uc11c \ud544\uc218\uc801\uc73c\ub85c \uc0ac\uc6a9\ub41c\ub2e4.<\/p>\n<p>ViewStub\uacfc \uc0ac\uc6a9\uc790 \uc815\uc758 \ubc14\uc778\ub529\uc744 \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 \uacf5\uc2dd\ubb38\uc11c\uc5d0\uc11c\ub294 \uc5b8\uae09\uc774 \uc5c6\ub294 \uba87\uac00\uc9c0 \uc81c\uc57d\uc870\uac74\uc774 \uc788\uc73c\uba70, \uadf8\uc5d0 \uae30\ubc18\ud55c \ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubcf4\uba74 \ub9e4\uc6b0 Tricky\ud558\ub2e4. \ubcf5\uc7a1\ud55c \ub808\uc774\uc544\uc6c3\uc744 \uad6c\uc131\ud558\ub294 \uc0ac\ub78c\ub4e4\uc5d0\uac8c \uc791\uc740 \ub3c4\uc6c0\uc774 \ub418\uc5c8\uc73c\uba74 \uc88b\uaca0\ub2e4.<\/p>\n<h1><a href=\"https:\/\/www.charlezz.com\/?attachment_id=20020\" rel=\"attachment wp-att-20020\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2019\/10\/giphy-1.gif\" alt=\"\" width=\"543\" height=\"485\" class=\"aligncenter size-full wp-image-20020\" \/><\/a><\/h1>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>ViewStub\uc774\ub780? ViewStub\uc740 \uc0ac\uc774\uc988\uac00 \uc5c6\ub294 \ubcf4\uc774\uc9c0 \uc54a\ub294 \ubdf0\ub85c \ub7f0\ud0c0\uc784\uc5d0\uc11c \ub2a6\uc740 \uc804\uac1c(lazy-inflate)\ub97c \uc6d0\ud560 \ub54c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4. ViewStub\uc744 \ubcf4\uc774\uac8c \ub9cc\ub4e4\uac70\ub098 inflate() \uba54\uc11c\ub4dc\ub97c \ud638\ucd9c\ud558\uba74 \ub808\uc774\uc544\uc6c3\uc774 \uc804\uac1c\ub418\uba74\uc11c ViewStub\uc744 \ub300\uccb4\ud558\uae30 \ub54c\ubb38\uc5d0 ViewStub\uc740 \uc0ac\ub77c\uc9c4\ub2e4. \uc804\uac1c\ub41c \ubdf0\ub294 ViewStub\uc758 \ubd80\ubaa8 \ubdf0\uc5d0 \ucd94\uac00 \ub41c\ub2e4. \ub808\uc774\uc544\uc6c3\uc5d0\uc11c ViewStub\uc744 \uc0ac\uc6a9\ud558\ub294 \uc608\uc81c\ub97c \ud655\uc778\ud558\uc790. &lt;ViewStub android:id=&#8221;@+id\/stub&#8221; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 android:inflatedId=&#8221;@+id\/subTree&#8221; \u00a0 \u00a0 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"inline_featured_image":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[16],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/19977"}],"collection":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=19977"}],"version-history":[{"count":19,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/19977\/revisions"}],"predecessor-version":[{"id":20288,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/19977\/revisions\/20288"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=19977"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=19977"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=19977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}