{"id":257402,"date":"2015-05-18T13:44:02","date_gmt":"2015-05-18T09:44:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=257402"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=257402","title":{"rendered":"\u041e RecyclerView \u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432"},"content":{"rendered":"<p>     \t\u041f\u0440\u0438\u0432\u0435\u0442, %username%!<br \/>  \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e \u043d\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0436\u0435\u0442\u0435 \u0432 Android SDK \u2014 RecyclerView, \u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u00ab\u0440\u0435\u0446\u0435\u043f\u0442\u0430\u0445\u00bb \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043d\u0438\u043c.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"\/\/habrastorage.org\/files\/ec1\/52f\/468\/ec152f4680354ceebf397c0775fdaaeb.png\"\/><\/div>\n<p><a name=\"habracut\"><\/a><\/p>\n<h1>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/h1>\n<p>  <\/p>\n<ol>\n<li><a href=\"#article1\">\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043e ViewHolder&#8217;\u0430\u0445<\/a><\/li>\n<li><a href=\"#article2\">\u0412\u043a\u0440\u0430\u0442\u0446\u0435 \u043e RecyclerView<\/a><\/li>\n<li><a href=\"#article3\">\u0412\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b<\/a><\/li>\n<li><a href=\"#article4\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 + \u0411\u043e\u043d\u0443\u0441<\/a><\/li>\n<li><a href=\"#references\">\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438<\/a><\/li>\n<\/ol>\n<p>  <a name=\"aricle1\"><\/a><\/p>\n<h1>1. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043e ViewHolder&#8217;\u0430\u0445<\/h1>\n<p>  \u0414\u043e \u0432\u044b\u0445\u043e\u0434\u0430 \u0432 \u0441\u0432\u0435\u0442 <a href=\"https:\/\/developer.android.com\/about\/versions\/lollipop.html\">Android SDK 5.0 Lollipop<\/a> \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0438 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432\u0438\u0434\u0436\u0435\u0442\u044b <a href=\"https:\/\/developer.android.com\/reference\/android\/widget\/ListView.html\">ListView<\/a> \u0438 <a href=\"https:\/\/developer.android.com\/reference\/android\/widget\/GridView.html\">GridView<\/a>. \u041e\u0431\u0449\u0435\u0439 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0435\u0439 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u044d\u0442\u0438\u043c \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u043c \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 ViewHolder. \u0421\u0443\u0442\u044c \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0439 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u044c\u044e\u0445\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u0440\u043e\u0433\u043e\u0439 \u0432\u044b\u0437\u043e\u0432 <a href=\"http:\/\/developer.android.com\/reference\/android\/view\/View.html#findViewById(int)\">findViewById(int)<\/a> \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.<\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u0442\u0438\u043f\u0438\u0447\u043d\u043e\u0433\u043e ViewHolder&#8217;\u0430 \u043f\u0440\u044f\u043c\u0438\u043a\u043e\u043c \u0438\u0437 <a href=\"http:\/\/developer.android.com\/training\/improving-layouts\/smooth-scrolling.html#ViewHolder\">\u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432 \u0433\u0443\u0433\u043b\u0430<\/a>:<\/p>\n<pre><code class=\"java\">static class ViewHolder {   TextView text;   TextView timestamp;   ImageView icon;   ProgressBar progress;   int position; }<\/code><\/pre>\n<p>  C\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u0445\u043e\u043b\u0434\u0435\u0440 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u043c layout&#8217;\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0435\u0442\u043e\u0434 <a href=\"http:\/\/developer.android.com\/reference\/android\/view\/View.html#setTag(int, java.lang.Object)\">setTag(int, Object)<\/a> (\u0441 \u043c\u043e\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0442\u043e\u0442 \u0435\u0449\u0451 \u043a\u043e\u0441\u0442\u044b\u043b\u044c). \u0412\u0441\u0451 \u0432\u0440\u043e\u0434\u0435 \u0437\u0434\u043e\u0440\u043e\u0432\u043e, \u043d\u043e \u043f\u0440\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0442\u0430\u043a\u0438\u0445 \u0432\u043e\u0442 ViewHolder&#8217;\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043b\u043e\u0445\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>  <a name=\"article2\"><\/a><\/p>\n<h1>2. \u0412\u043a\u0440\u0430\u0442\u0446\u0435 \u043e RecyclerView<\/h1>\n<p>  \u041a \u0432\u044b\u0445\u043e\u0434\u0443 Android SDK 5.0 Lollipop \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 Google \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u043e\u0437\u0430\u0440\u0438\u043b\u043e, \u0447\u0442\u043e \u0434\u0432\u0430 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u043c\u043e\u0440\u0430\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0438 \u0438 \u043d\u0443\u0436\u043d\u043e \u0431\u044b \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0445 \u043d\u0430 \u043d\u0435\u0447\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0438\u043b\u044c\u043d\u043e\u0435, \u043c\u043e\u0434\u043d\u043e\u0435 \u0438 \u043c\u043e\u043b\u043e\u0434\u0451\u0436\u043d\u043e\u0435. \u0411\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u044b, \u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439. \u0422\u0430\u043a \u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043d\u0430 \u0441\u0432\u0435\u0442 <a href=\"https:\/\/developer.android.com\/reference\/android\/support\/v7\/widget\/RecyclerView.html\">RecyclerView<\/a>. \u0422\u0430\u043a \u0432 \u0447\u0451\u043c \u0436\u0435 \u0435\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u0438\u044f, \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u0432\u044b? <\/p>\n<p>  \u042f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435, \u0430 \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0438\u0445 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u043e\u0432\u0435\u0442\u0443\u044e \u043a \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044e <a href=\"http:\/\/habrahabr.ru\/post\/237101\/\">\u0432\u043e\u0442 \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e \u043d\u0430 \u0445\u0430\u0431\u0440\u0435<\/a>. \u0418\u0442\u0430\u043a:<\/p>\n<ol>\n<li>\u0421\u0430\u043c \u0432\u0438\u0434\u0436\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0431\u0435\u0440\u0451\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f \u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c <a href=\"https:\/\/developer.android.com\/reference\/android\/support\/v7\/widget\/RecyclerView.LayoutManager.html\">LayoutManager&#8217;\u044b<\/a>.<\/li>\n<li>\u041f\u0430\u0442\u0442\u0435\u0440\u043d <a href=\"https:\/\/developer.android.com\/reference\/android\/support\/v7\/widget\/RecyclerView.ViewHolder.html\">ViewHolder<\/a> \u0441\u0442\u0430\u043b \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c. \u041f\u0440\u0438\u0447\u0451\u043c \u0432\u0438\u0434\u0436\u0435\u0442 \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f \u0437\u0430\u043d\u043e\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 ViewHolder&#8217;\u044b \u0438 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0443\u0436\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 (\u043e\u0442\u0441\u044e\u0434\u0430 \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435), \u0447\u0442\u043e \u0431\u043b\u0430\u0433\u043e\u043f\u0440\u0438\u044f\u0442\u043d\u043e \u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.<\/li>\n<li>\u041d\u043e\u0432\u044b\u0439, \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439.<\/li>\n<\/ol>\n<p>  \u042f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0435\u0433\u043e \u0438 \u0432\u0438\u0434\u0436\u0435\u0442 \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0443 \u043c\u0435\u043d\u044f \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0440\u0435\u0447\u0438\u0432\u044b\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u044f. \u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0434\u0430, \u0437\u0434\u043e\u0440\u043e\u0432\u043e, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 ViewHolder&#8217;\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0440\u043e\u0434\u0435 \u0442\u043e\u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0439, \u043f\u0430\u043c\u044f\u0442\u0438 \u0436\u0440\u0451\u0442 \u043c\u0435\u043d\u044c\u0448\u0435. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u043d\u0435\u0434\u043e\u0434\u0435\u043b\u0430\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u0438\u0434\u0436\u0435\u0442\u0430.<\/p>\n<p>  \u0427\u0442\u043e \u044f \u043f\u043e\u043d\u0438\u043c\u0430\u044e \u043f\u043e\u0434 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e? \u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0432 ListView (\u0438\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043d\u0435 \u0442\u0430\u043a \u043a\u0430\u043a \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043e) \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u043b\u0435\u0437\u0442\u044c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0432 \u0447\u0451\u043c \u043e\u0448\u0438\u0431\u043a\u0430, \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435\u0451, \u043f\u043e\u0434\u043e\u0442\u043a\u043d\u0443\u0442\u044c \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u0439 \u0442\u0443\u0442 \u0438 \u0442\u0430\u043c \u0438 \u0432\u0441\u0451 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. RecyclerView \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0432 \u043f\u043b\u0430\u043d\u0435 \u043b\u043e\u0433\u0438\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b, \u043c\u043e\u0437\u0433 \u0441\u043b\u043e\u043c\u0430\u0435\u0448\u044c, \u043f\u043e\u043a\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u0448\u044c\u0441\u044f. \u042f \u043f\u044b\u0442\u0430\u043b\u0441\u044f, \u043d\u043e \u0437\u0430\u0431\u0440\u043e\u0441\u0438\u043b, \u0443\u0436 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0441\u0438\u043b \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430, \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0432\u0448\u0435\u0433\u043e \u0432 ListView \u0438 GridView. \u0417\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0434\u0430\u043b\u0435\u043a\u043e \u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e \u2014 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 (\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0430\u044f \u0442\u0435\u043c\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438), \u043e\u0442\u0441\u0442\u0443\u043f\u044b \u043c\u0435\u0436\u0434\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438. \u0420\u0430\u043d\u044c\u0448\u0435, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e, \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043f\u0430\u0440\u0443 \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u043a\u043e\u0434\u0430, \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430 \u044d\u0442\u043e \u0443\u0439\u0434\u0443\u0442 \u0443\u0436\u0435 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0441\u0442\u0440\u043e\u043a. \u0415\u0441\u0442\u044c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f\/\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u0442\u043e \u043a \u0432\u0430\u043c \u0432 \u0434\u0432\u0435\u0440\u044c \u0443\u0436\u0435 \u0441\u0442\u0443\u0447\u0438\u0442\u0441\u044f \u043f\u0442\u0438\u0446\u0430 \u043e\u0431\u043b\u043e\u043c\u0438\u043d\u0433\u043e. \u0412\u0438\u0434\u0436\u0435\u0442 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e \u0447\u0430\u0441\u0442\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u0438 \u0435\u0441\u043b\u0438 \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438\u0437\u0432\u043d\u0435 (\u0438\u0437 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440), \u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u2014 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432\u0438\u0434\u0436\u0435\u0442\u0430 (\u0442\u0435 \u0441\u0430\u043c\u044b\u0435 ViewHolder&#8217;\u044b) \u0432 \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0444\u0430\u043d\u0442\u0430\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e \u0432\u0430\u0448\u0435\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430.<\/p>\n<p>  \u0420\u0435\u0437\u044e\u043c\u0438\u0440\u0443\u044f \u2014 \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u044b\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u044b \u0438 \u0432\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438, \u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u043a\u0430 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0441\u0451 \u043a\u0430\u043a \u0435\u0441\u0442\u044c \u0438 \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0432\u0438\u0434\u0436\u0435\u0442 \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u043c \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u2014 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 RecyclerView, \u0432\u0434\u0440\u0443\u0433 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p>  <a name=\"article3\"><\/a><\/p>\n<h1>3. \u0412\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b<\/h1>\n<p>  \u0418\u0442\u0430\u043a, \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0433\u043b\u0430\u0432\u043d\u043e\u043c\u0443 \u2014 \u043a \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438. \u041f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 RecyclerView. \u0421\u0440\u0430\u0437\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u044e\u0441\u044c \u2014 \u0438\u0434\u0435\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0447\u0435\u0440\u043f\u043d\u0443\u0442\u0430 \u0438\u0437 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 \u0411\u0438\u043b\u043b\u0430 \u0424\u0438\u043b\u043b\u0438\u043f\u0441\u0430 \u043f\u0440\u043e RecyclerView (<a href=\"#references\">\u0441\u0441\u044b\u043b\u043a\u0438 \u0432 \u043a\u043e\u043d\u0446\u0435<\/a>), \u0442\u0430\u043a \u0447\u0442\u043e \u0432\u0441\u0451 \u043d\u0438\u0436\u0435\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u043e\u043b\u044c\u043d\u044b\u043c \u043a\u0440\u0430\u0442\u043a\u0438\u043c \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437\u043e\u043c.<br \/>  \u0412 ListView \u0434\u043b\u044f \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043c\u0435\u0442\u043e\u0434 <a href=\"https:\/\/developer.android.com\/reference\/android\/widget\/AbsListView.html#setChoiceMode(int)\">setChoiceMode(int)<\/a>, RecyclerView \u0436\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u0435\u0442, \u0447\u0442\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0448 \u0430\u0434\u0430\u043f\u0442\u0435\u0440.<\/p>\n<p>  \u0421\u0445\u0435\u043c\u0430 \u0442\u0430\u043a\u0430\u044f:<img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/f14\/62d\/04a\/f1462d04ab594cf996150148fb37ee79.png\"\/><br \/>  \u041d\u0430 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0435 \u044f \u0441\u0445\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043b \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438. \u041f\u0443\u043d\u043a\u0442\u0438\u0440\u043d\u044b\u0435 \u0441\u0442\u0440\u0435\u043b\u043a\u0438 \u2014 \u0441\u0441\u044b\u043b\u043a\u0438, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u2014 \u0432\u044b\u0437\u043e\u0432\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u0417\u0435\u043b\u0451\u043d\u044b\u043c \u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043b \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u043b\u043e\u0433\u0438\u043a\u0443 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<ol>\n<li>ViewHolderWrapper \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u0435\u0431\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 ClickListener&#8217;\u0430 \u0434\u043b\u044f \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0432\u044c\u044e\u0445\u0438 ViewHolder&#8217;\u0430 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f onClick \u0438 onLongClick. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432 HolderClickObservable (ViewHolderClickWrapper), \u043b\u0438\u0431\u043e, \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430 <a href=\"https:\/\/github.com\/bejibx\/android-recyclerview-example\/blob\/master\/library\/src\/main\/java\/com\/bejibx\/android\/recyclerview\/selection\/SelectionHelper.java\">SelectionHelper&#8217;\u0430<\/a> \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u044b\u0437\u043e\u0432\u043e\u043c setItemSelected(ViewHolder, boolean) (ViewHolderMultiSelectionWrapper).<\/li>\n<li>SelectionHelper \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0445 \u0438 \u043e\u043f\u043e\u0432\u0435\u0449\u0430\u0435\u0442 \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u0435\u0439 (<a href=\"http:\/\/android-recyclerview-example\/library\/src\/main\/java\/com\/bejibx\/android\/recyclerview\/selection\/SelectionObserver.java\">SelectionObserver<\/a>) \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f.<\/li>\n<li>\u0421\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044c (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0430\u0434\u0430\u043f\u0442\u0435\u0440) \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043d\u0438\u043c (\u043d\u0430 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0435 \u0432\u044b\u0437\u043e\u0432 startActionMode \u0443 <a href=\"https:\/\/developer.android.com\/reference\/android\/app\/Activity.html\">Activity<\/a>).<\/li>\n<\/ol>\n<p>  \u0412 \u0441\u0430\u043c\u043e\u043c \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f:<\/p>\n<p>  1. \u0421\u043e\u0437\u0434\u0430\u0442\u044c SelectionHelper \u0438 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u0435\u0439 (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0430\u043c \u0430\u0434\u0430\u043f\u0442\u0435\u0440, \u043d\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 Activity, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440)<\/p>\n<pre><code class=\"java\">mSelectionHelper = new SelectionHelper(mHolderTracker); mSelectionHelper.registerSelectionObserver(this);<\/code><\/pre>\n<p>  2. \u041e\u0431\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 ViewHolder&#8217;\u044b \u0432\u043e ViewHolderWrapper \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430.<\/p>\n<pre><code class=\"java\">@Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int position) {     LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());     ImageViewHolder holder = new ImageViewHolder(             inflater.inflate(R.layout.gallery_item, viewGroup, false));         return mSelectionHelper.wrapSelectable(holder); }<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434 wrapSelectable(ViewHolder) \u0443 SelectionHelper&#8217;\u0430:<\/p>\n<pre><code class=\"java\">public &lt;H extends RecyclerView.ViewHolder&gt; H wrapSelectable(H holder) {     new ViewHolderMultiSelectionWrapper(holder);     return holder; }<\/code><\/pre>\n<p>  3. \u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0446\u0435\u043f\u043b\u044f\u0442\u044c \u043d\u0430\u0448\u0438 ViewHolder&#8217;\u044b \u043a SelectionHelper&#8217;\u0443 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <a href=\"https:\/\/developer.android.com\/reference\/android\/support\/v7\/widget\/RecyclerView.Adapter.html#onBindViewHolder(VH, int)\">onBindViewHolder(ViewHolder, int)<\/a> \u043d\u0430\u0448\u0435\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430!<\/p>\n<pre><code class=\"java\">@Override public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {     Image image = mDataSet.getItem(position);     ImageViewHolder imageViewHolder = (ImageViewHolder) viewHolder;     imageViewHolder.bindInfo(image);      Checkable view = (Checkable) viewHolder.itemView;     view.setChecked(mSelectionHelper.isItemSelected(position));     mHolderTracker.bindHolder(imageViewHolder, position); }<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u043a\u0430 \u043d\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442 RecyclerView \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 ViewHolder&#8217;\u043e\u0432. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0432\u0435\u0441\u0442\u0438 \u0438\u0445 \u0443\u0447\u0451\u0442, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0443 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0443 \u0432\u0441\u0435\u0445 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 (\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0437\u0430\u043a\u0440\u044b\u043b ActionMode, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440), SelectionHelper \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u044d\u0442\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u0412\u044c\u044e\u0445\u0438 \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u044c\u0441\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c\u0438, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0442\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442.<\/p>\n<p>  \u0412\u044b \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u2014 \u00ab\u0410 \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0435 ViewHolder&#8217;\u044b \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 setItemSelected(ViewHolder, boolean)?\u00bb. \u0422\u0443\u0442 \u043a\u0430\u043a \u0440\u0430\u0437 \u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c RecyclerView \u2014 \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0437\u0430\u043d\u043e\u0432\u043e \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 ViewHolder&#8217;\u044b.<\/p>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<ol>\n<li>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u041d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 10 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u2014 10 ViewHolder&#8217;\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u043e \u0434\u043b\u044f \u043d\u0438\u0445.<\/li>\n<li>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c ActionMode, \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u2014 1,2,3.<\/li>\n<li>\u041f\u0440\u043e\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0435\u043c \u0432\u044c\u044e\u0445\u0443 \u0432\u043d\u0438\u0437, \u0432\u0438\u0434\u0438\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441 10 \u043f\u043e 20. \u0414\u0443\u043c\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u0438\u0441\u0438\u0442 20 ViewHolder&#8217;\u043e\u0432? \u041a\u0430\u043a \u0431\u044b \u043d\u0438 \u0442\u0430\u043a! \u0414\u043b\u044f \u0447\u0430\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 RecyclerView \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043d\u043e\u0432\u044b\u0435 ViewHolder\u2019\u044b, \u0430 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u0437\u0430\u043d\u043e\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f. \u041f\u0440\u0438\u0447\u0451\u043c \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u0432 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435.<\/li>\n<li>\u0422\u0435\u043f\u0435\u0440\u044c \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u0438\u043c \u0432\u044c\u044e\u0445\u0443 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432\u0432\u0435\u0440\u0445, \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 10 ViewHolder&#8217;\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0430, \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0438\u0445 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u043d\u043e\u0432\u044b\u0435. \u041e\u0441\u0442\u0430\u0432\u0448\u0430\u044f\u0441\u044f \u0447\u0430\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 \u0437\u0430\u043d\u043e\u0432\u043e \u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0442\u0435\u0445 \u0436\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0439.<\/li>\n<li>\u041e\u0442\u043c\u0435\u043d\u044f\u0435\u043c ActionMode. SelectionHelper \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0441\u043a\u0438\u0434\u0430\u0442\u044c \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044f\u043c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e \u0441\u043c\u0435\u043d\u0438\u0432\u0448\u0435\u043c\u0441\u044f \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043d\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0445 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c ViewHolder&#8217;\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u043d\u043e \u043e\u043d \u0443\u0436\u0435 \u043d\u0435 \u0432\u043b\u0430\u0434\u0435\u0435\u0442 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0432\u0441\u0435 Holder&#8217;\u044b \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c!<\/li>\n<\/ol>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0441 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c.<\/p>\n<p>  \u0418 \u0437\u0434\u0435\u0441\u044c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0432\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u2014 \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0441\u0442\u0440\u043e\u0433\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 (strong reference) \u043d\u0430 ViewHolder&#8217;\u044b! \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u044b \u0438\u0437 RecyclerView \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0444\u0430\u0437\u044b \u041b\u0443\u043d\u044b \u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u044f \u043b\u0435\u0432\u043e\u0439 \u043f\u044f\u0442\u043a\u0438 \u041b\u0430\u0440\u0440\u0438 \u041f\u0435\u0439\u0434\u0436\u0430. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u0433\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043d\u0438\u0445, \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0443\u0442\u0435\u0447\u043a\u0430 \u043f\u0430\u043c\u044f\u0442\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u0441\u044b\u043b\u043e\u043a \u0432 ViewHolderWrapper \u0438 <a href=\"https:\/\/github.com\/bejibx\/android-recyclerview-example\/blob\/master\/library\/src\/main\/java\/com\/bejibx\/android\/recyclerview\/selection\/WeakHolderTracker.java\">WeakHolderTracker<\/a> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e <a href=\"http:\/\/developer.android.com\/reference\/java\/lang\/ref\/WeakReference.html\">WeakReference<\/a>.<\/p>\n<pre><code class=\"java\">private abstract class ViewHolderWrapper implements android.view.View.OnClickListener {     protected final WeakReference&lt;RecyclerView.ViewHolder&gt; mWrappedHolderRef;      protected ViewHolderWrapper(RecyclerView.ViewHolder holder)     {         mWrappedHolderRef = new WeakReference&lt;&gt;(holder);     } }<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">WeakHolderTracker<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">public class WeakHolderTracker {     private final SparseArray&lt;WeakReference&lt;RecyclerView.ViewHolder&gt;&gt; mHoldersByPosition =             new SparseArray&lt;&gt;();      public void bindHolder(RecyclerView.ViewHolder holder, int position)     {         mHoldersByPosition.put(position, new WeakReference&lt;&gt;(holder));     }      @Nullable     private RecyclerView.ViewHolder getHolder(int position)     {         WeakReference&lt;RecyclerView.ViewHolder&gt; holderRef = mHoldersByPosition.get(position);         if (holderRef == null)         {             mHoldersByPosition.remove(position);             return null;         }          RecyclerView.ViewHolder holder = holderRef.get();         if (holder == null || (holder.getAdapterPosition() != position && holder.getAdapterPosition() != RecyclerView.NO_POSITION))         {             mHoldersByPosition.remove(position);             return null;         }          return holder;     }      public List&lt;RecyclerView.ViewHolder&gt; getTrackedHolders()     {         List&lt;RecyclerView.ViewHolder&gt; holders = new ArrayList&lt;&gt;();          for (int i = 0; i &lt; mHoldersByPosition.size(); i++)         {             int key = mHoldersByPosition.keyAt(i);             RecyclerView.ViewHolder holder = getHolder(key);              if (holder != null)             {                 holders.add(holder);             }         }          return holders;     } }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  4. \u0422\u0430\u043a\u0436\u0435 \u0432\u0430\u0436\u043d\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u0432 onBindViewHolder(ViewHolder, int) \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0435\u0441\u0442\u044c (\u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u2014 \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u0443\u0431\u0440\u0430\u0442\u044c!). \u0412\u044b \u0436\u0435 \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u0434\u043b\u044f \u043d\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d ViewHolder, \u0440\u0430\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0439\u0441\u044f \u0434\u043b\u044f \u043d\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442?<br \/>  \u0423 \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>  4.1. SelectableRecyclerViewAdapter.onBindViewHolder(ViewHolder, int)<\/p>\n<pre><code class=\"java\">Checkable view = (Checkable) viewHolder.itemView; view.setChecked(mSelectionHelper.isItemSelected(position));<\/code><\/pre>\n<p>  4.2. layout-\u0444\u0430\u0439\u043b \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430<\/p>\n<pre><code class=\"xml\">&lt;com.bejibx.android.recyclerview.example.ui.widget.CheckableAutofitHeightFrameLayout      xmlns:android=&quot;http:\/\/schemas.android.com\/apk\/res\/android&quot;     xmlns:tools=&quot;http:\/\/schemas.android.com\/tools&quot;     android:layout_width=&quot;80dp&quot;     android:layout_height=&quot;80dp&quot;     android:background=&quot;#AAA&quot;     android:foreground=&quot;@drawable\/gallery_item_foreground&quot;     tools:ignore=&quot;ContentDescription,RtlHardcoded&quot;&gt;      &lt;ImageView         android:id=&quot;@+id\/image&quot;         android:layout_width=&quot;match_parent&quot;         android:layout_height=&quot;match_parent&quot; \/&gt;  &lt;\/com.bejibx.android.recyclerview.example.ui.widget.CheckableAutofitHeightFrameLayout&gt;<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">4.3. \u0412\u0438\u0434\u0436\u0435\u0442 CheckableAutofitHeightFrameLayout<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">public class CheckableAutofitHeightFrameLayout extends FrameLayout implements Checkable {     private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked};      private boolean mIsChecked;     private boolean mIsCheckable;      public CheckableAutofitHeightFrameLayout(Context context)     {         super(context);     }      public CheckableAutofitHeightFrameLayout(Context context, AttributeSet attrs)     {         super(context, attrs);     }      public CheckableAutofitHeightFrameLayout(Context context, AttributeSet attrs, int defStyleAttr)     {         super(context, attrs, defStyleAttr);     }      @TargetApi(Build.VERSION_CODES.LOLLIPOP)     public CheckableAutofitHeightFrameLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)     {         super(context, attrs, defStyleAttr, defStyleRes);     }      @Override     protected int[] onCreateDrawableState(int extraSpace)     {         final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);         if (isChecked())         {             mergeDrawableStates(drawableState, CHECKED_STATE_SET);         }         return drawableState;     }      @Override     public boolean isCheckable()     {         return mIsCheckable;     }      @Override     public void setCheckable(boolean isCheckable)     {         boolean wasCheckable = isCheckable();         mIsCheckable = isCheckable;         if (!isCheckable && isChecked())         {             setChecked(false);         }         else if (wasCheckable ^ mIsCheckable)         {             refreshDrawableState();         }      }      @Override     public void setChecked(boolean isChecked)     {         boolean wasChecked = isChecked();         mIsChecked = isCheckable() && isChecked;          if (wasChecked ^ mIsChecked)         {             refreshDrawableState();         }     }      @Override     public boolean isChecked()     {         return mIsChecked;     }      @Override     public void toggle()     {         setChecked(!mIsChecked);     }      @Override     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)     {         \/\/noinspection SuspiciousNameCombination         super.onMeasure(widthMeasureSpec, widthMeasureSpec);     } }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  CheckableAutofitHeightFrameLayout \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043a <a href=\"http:\/\/developer.android.com\/reference\/android\/widget\/FrameLayout.html\">FrameLayout<\/a> \u0432\u0441\u0435\u0433\u043e 2 \u0432\u0435\u0449\u0438: \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043e\u043d \u0432\u0441\u0435\u0433\u0434\u0430 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0439 (\u0441\u043c\u043e\u0442\u0440\u0438 onMeasure(int, int)) \u0438, \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043a DrawableStates (\u0442\u0435 \u0441\u0430\u043c\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 xml) \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <a href=\"http:\/\/developer.android.com\/reference\/android\/R.attr.html#state_checked\">state_checked<\/a>. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435, \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0443 \u0442\u0430\u043a\u043e\u0433\u043e layout&#8217;\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"http:\/\/developer.android.com\/reference\/android\/graphics\/drawable\/StateListDrawable.html\">StateListDrawable<\/a> \u043d\u0430 \u0432\u0440\u043e\u0434\u0435 \u044d\u0442\u043e\u0433\u043e:<\/p>\n<pre><code class=\"xml\">&lt;selector xmlns:android=&quot;http:\/\/schemas.android.com\/apk\/res\/android&quot;&gt;      &lt;item android:state_pressed=&quot;true&quot;&gt;         &lt;shape xmlns:android=&quot;http:\/\/schemas.android.com\/apk\/res\/android&quot;&gt;             &lt;stroke android:color=&quot;@color\/accent&quot; android:width=&quot;1dp&quot; \/&gt;         &lt;\/shape&gt;     &lt;\/item&gt;      &lt;item android:state_checked=&quot;true&quot;&gt;         &lt;shape xmlns:android=&quot;http:\/\/schemas.android.com\/apk\/res\/android&quot; android:shape=&quot;rectangle&quot;&gt;             &lt;stroke android:color=&quot;@color\/accent&quot; android:width=&quot;1dp&quot; \/&gt;             &lt;solid android:color=&quot;@color\/accent_alpha&quot; \/&gt;         &lt;\/shape&gt;     &lt;\/item&gt;      &lt;item android:drawable=&quot;@android:color\/transparent&quot; \/&gt;  &lt;\/selector&gt;<\/code><\/pre>\n<p>\u0438 \u0432\u0441\u0435 \u0434\u0435\u0442\u0430\u043b\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0443\u043f\u043e\u043b\u0437\u0430\u044e\u0442 \u0432 xml-\u043a\u0438, \u0432 Java \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<\/p>\n<p>  5. \u041f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 onSelectableChanged(boolean) \u0432 Activity \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c ActionMode:<\/p>\n<p>  \u0412 \u0410\u0434\u0430\u043f\u0442\u0435\u0440\u0435<\/p>\n<pre><code class=\"java\">@Override public void onSelectableChanged(boolean isSelectable) {     if (isSelectable)     {         mActivity.startActionMode();     } }<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0417\u0430\u043f\u0443\u0441\u043a ActionMode \u0432 Activity<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">public class GalleryActivity extends Activity {     private final ActionModeCallback mActionModeCallback = new ActionModeCallback();      private SelectableRecyclerViewAdapter mAdapter;      @Override     protected void onCreate(Bundle savedInstanceState)     {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          RecyclerView recyclerView = (RecyclerView) findViewById(R.id.gallery);         int columnWidth = getResources().getDimensionPixelSize(R.dimen.column_width);         int vSpacing = getResources().getDimensionPixelSize(R.dimen.grid_spacing_vertical);         int hSpacing = getResources().getDimensionPixelSize(R.dimen.grid_spacing_horizontal);         recyclerView.setLayoutManager(new GridAutofitLayoutManager(this, columnWidth));         recyclerView.addItemDecoration(new GridSimpleSpacingDecoration(hSpacing, vSpacing));         DataSet&lt;Image&gt; dataSet = new DummyImagesDataSet();         mAdapter = new SelectableRecyclerViewAdapter(this, dataSet);         recyclerView.setAdapter(mAdapter);     }      public void startActionMode()     {         startActionMode(mActionModeCallback);     }      private class ActionModeCallback implements ActionMode.Callback, SelectionObserver     {         private ActionMode mActionMode;          @Override         public boolean onPrepareActionMode(ActionMode actionMode, Menu menu)         {             return false;         }          @Override         public void onDestroyActionMode(ActionMode actionMode)         {             SelectionHelper selectionHelper = mAdapter.getSelectionHelper();             selectionHelper.unregisterSelectionObserver(this);             mActionMode = null;             selectionHelper.setSelectable(false);         }          @Override         public boolean onCreateActionMode(ActionMode actionMode, Menu menu)         {             mActionMode = actionMode;             mActionMode.getMenuInflater().inflate(R.menu.gallery_selection, menu);             mAdapter.getSelectionHelper().registerSelectionObserver(this);             return true;         }          @Override         public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem)         {             switch (menuItem.getItemId())             {                 case R.id.menu_toast:                     Toast.makeText(GalleryActivity.this,                             R.string.text_simple_toast, Toast.LENGTH_SHORT).show();                     break;             }             return true;         }          @Override         public void onSelectedChanged(RecyclerView.ViewHolder holder, boolean isSelected)         {             if (mActionMode != null)             {                 int checkedImagesCount = mAdapter.getSelectionHelper().getSelectedItemsCount();                 mActionMode.setTitle(String.valueOf(checkedImagesCount));             }         }          @Override         public void onSelectableChanged(boolean isSelectable)         {             if (!isSelectable)             {                mActionMode.finish();             }         }     } }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u041a\u0430\u043a \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435, \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 ActionMode, \u043e\u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u0435\u0431\u044f \u043a\u0430\u043a SelectionObserver. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435. \u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0432\u044b\u0437\u0432\u0430\u0442\u044c unregisterSelectionObserver(SelectionObserver) \u043f\u0440\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438!<\/p>\n<p>  <a name=\"article4\"><\/a><\/p>\n<h1>4. \u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 + \u0411\u043e\u043d\u0443\u0441<\/h1>\n<p>  \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u0441 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c. \u0412\u0435\u0441\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 <a href=\"https:\/\/github.com\/bejibx\/android-recyclerview-example\">GitHub<\/a>.<\/p>\n<p>  \u0412 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0435\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0438\u0448\u0435\u043a \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 RecyclerView, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435.<\/p>\n<p>  1. \u0415\u0441\u043b\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0430\u0436\u0430\u0442\u0438\u044f, \u0432\u043c\u0435\u0441\u0442\u043e ViewHolderMultiSelectionWrapper \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0439\u0442\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 ViewHolderClickWrapper \u043c\u0435\u0442\u043e\u0434\u043e\u043c wrapClickable(ViewHolder). \u0421\u0430\u043c \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">public class SelectableRecyclerViewAdapter extends RecyclerView.Adapter&lt;RecyclerView.ViewHolder&gt; implements SelectionObserver {     private final SelectionHelper mSelectionHelper;      public SelectableRecyclerViewAdapter()     {         mSelectionHelper = new SelectionHelper();         mSelectionHelper.registerSelectionObserver(this);     }      public SelectionHelper getSelectionHelper()     {         return mSelectionHelper;     }      @Override     public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int position)     {         LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());         ImageViewHolder holder = new ImageViewHolder(                 inflater.inflate(R.layout.gallery_item, viewGroup, false));         return mSelectionHelper.wrapClickable(holder);     }      @Override     public void onHolderClick(RecyclerView.ViewHolder holder)     { \t\t\/\/ perform item click     }      @Override     public boolean onHolderLongClick(RecyclerView.ViewHolder holder)     { \t    \/\/ perform item long click         return false;     }      \/\/... }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  2. <a href=\"https:\/\/developer.android.com\/reference\/android\/support\/v7\/widget\/GridLayoutManager.html\">GridLayoutManager<\/a> \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0448\u0438\u0440\u0438\u043d\u044b \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430. \u042f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u044d\u0442\u043e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0432 <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">GridAutofitLayoutManager<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">public class GridAutofitLayoutManager extends GridLayoutManager {     private int mColumnWidth;     private boolean mColumnWidthChanged = true;      public GridAutofitLayoutManager(Context context, int columnWidth)     {         \/* Initially set spanCount to 1, will be changed automatically later. *\/         super(context, 1);         setColumnWidth(checkedColumnWidth(context, columnWidth));     }      public GridAutofitLayoutManager(Context context, int columnWidth, int orientation, boolean reverseLayout)     {         \/* Initially set spanCount to 1, will be changed automatically later. *\/         super(context, 1, orientation, reverseLayout);         setColumnWidth(checkedColumnWidth(context, columnWidth));     }      private int checkedColumnWidth(Context context, int columnWidth)     {         if (columnWidth &lt;= 0)         {             context.getResources().getDimensionPixelSize(R.dimen.rv_def_column_width);         }         return columnWidth;     }      public void setColumnWidth(int newColumnWidth)     {         if (newColumnWidth &gt; 0 && newColumnWidth != mColumnWidth)         {             mColumnWidth = newColumnWidth;             mColumnWidthChanged = true;         }     }      \/* I don't actually remember why I choose to set span count in onLayoutChildren, I wrote this     class some time ago. But the point is we need to do so after view get measured,     so we can get its height and width. *\/     @Override     public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state)     {         if (mColumnWidthChanged && mColumnWidth &gt; 0)         {             int totalSpace;             if (getOrientation() == VERTICAL)             {                 totalSpace = getWidth() - getPaddingRight() - getPaddingLeft();             }             else             {                 totalSpace = getHeight() - getPaddingTop() - getPaddingBottom();             }             int spanCount = Math.max(1, totalSpace \/ mColumnWidth);             setSpanCount(spanCount);             mColumnWidthChanged = false;         }         super.onLayoutChildren(recycler, state);     } }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0412\u0438\u0434\u0436\u0435\u0442 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u0442 \u0448\u0438\u0440\u0438\u043d\u0443 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 columnWidth. \u0412\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442: \u0435\u0441\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u0448\u0438\u0440\u0438\u043d\u0430 330 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, \u0430 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0436\u0435\u043b\u0430\u0435\u043c\u0443\u044e \u0448\u0438\u0440\u0438\u043d\u0443 100, \u0432 \u0438\u0442\u043e\u0433\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0431\u0443\u0434\u0435\u0442 3 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u043f\u043e 110 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u044d\u0442\u043e\u0439 \u0448\u0438\u0440\u0438\u043d\u044b. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0442\u0430\u043a\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u043b CheckableAutofitHeightFrameLayout \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0449\u0438\u043c \u0441\u0432\u043e\u044e \u0432\u044b\u0441\u043e\u0442\u0443 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0448\u0438\u0440\u0438\u043d\u044b. <\/p>\n<p>  3. \u0414\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u0441\u0442\u0443\u043f\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c paddingTop\/Left \u0443 RecyclerView \u0438 marginRight\/Bottom \u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043a\u043e\u0441\u0442\u044b\u043b\u044c. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 <a href=\"https:\/\/developer.android.com\/reference\/android\/support\/v7\/widget\/RecyclerView.ItemDecoration.html\">ItemDecoration<\/a> \u043a RecyclerView. \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e. \u0414\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u0441\u0442\u0443\u043f\u043e\u0432 \u043a \u043e\u0431\u044b\u0447\u043d\u043e\u043c\u0443 GridLayoutManager (\u043f\u043e\u0434 \u00ab\u043e\u0431\u044b\u0447\u043d\u044b\u043c\u00bb \u044f \u0438\u043c\u0435\u044e \u0432\u0432\u0438\u0434\u0443 GridLayoutManager \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c <a href=\"https:\/\/developer.android.com\/reference\/android\/support\/v7\/widget\/GridLayoutManager.SpanSizeLookup.html\">SpanSizeLookup<\/a>, \u0432 \u043d\u0451\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 1 span) \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">GridSimpleSpacingDecoration<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\"> public class GalleryActivity extends Activity {     private final ActionModeCallback mActionModeCallback = new ActionModeCallback();      private SelectableRecyclerViewAdapter mAdapter;      @Override     protected void onCreate(Bundle savedInstanceState)     {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          RecyclerView recyclerView = (RecyclerView) findViewById(R.id.gallery);         int columnWidth = getResources().getDimensionPixelSize(R.dimen.column_width);         int vSpacing = getResources().getDimensionPixelSize(R.dimen.grid_spacing_vertical);         int hSpacing = getResources().getDimensionPixelSize(R.dimen.grid_spacing_horizontal);         recyclerView.setLayoutManager(new GridAutofitLayoutManager(this, columnWidth));         recyclerView.addItemDecoration(new GridSimpleSpacingDecoration(hSpacing, vSpacing));         DataSet&lt;Image&gt; dataSet = new DummyImagesDataSet();         mAdapter = new SelectableRecyclerViewAdapter(this, dataSet);         recyclerView.setAdapter(mAdapter);     } \t \t\/\/...<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0412\u043e\u0442, \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0438 \u0432\u0441\u0451. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0438 \u0447\u0442\u043e\u0431\u044b \u0432\u0430\u0448\u0438 \u0441\u043f\u0438\u0441\u043a\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u043b\u0438!<br \/>  <a name=\"references\"><\/a>  <\/p>\n<h1>5. \u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438<\/h1>\n<p>  <\/p>\n<ol>\n<li><a href=\"https:\/\/www.bignerdranch.com\/blog\/recyclerview-part-1-fundamentals-for-listview-experts\/\">\u041f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u0411\u0438\u043b\u043b\u0430 \u0424\u0438\u043b\u043b\u0438\u043f\u0441\u0430 \u043e RecyclerView. \u0411\u0430\u0437\u043e\u0432\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f (\u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c)<\/a><\/li>\n<li><a href=\"https:\/\/www.bignerdranch.com\/blog\/recyclerview-part-2-choice-modes\/\">\u0412\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u0411\u0438\u043b\u043b\u0430 \u0424\u0438\u043b\u043b\u0438\u043f\u0441\u0430 \u043e RecyclerView. \u041e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 (\u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c)<\/a><\/li>\n<li><a href=\"https:\/\/www.grokkingandroid.com\/first-glance-androids-recyclerview\/\">\u041e\u0431\u0437\u043e\u0440\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e RecyclerView (\u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c)<\/a><\/li>\n<li><a href=\"http:\/\/developer.android.com\/training\/improving-layouts\/smooth-scrolling.html#ViewHolder\">\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0435 ViewHolder \u0434\u043b\u044f ListView (\u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c)<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/company\/etransport\/blog\/250689\/\">\u0414\u0435\u043b\u0430\u0435\u043c parallax header \u0432 RecyclerView<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/post\/237101\/\">\u0411\u0430\u0437\u043e\u0432\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e RecyclerView \u0438 CardView<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/company\/surfingbird\/blog\/244387\/\">\u041e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043d\u0430 RecyclerView<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/post\/169883\/\">\u0422\u0438\u043f\u044b \u0441\u0441\u044b\u043b\u043e\u043a \u0432 Java<\/a><\/li>\n<\/ol>\n<p>  PS. \u0412\u044b\u0440\u0430\u0436\u0430\u044e \u043e\u0433\u0440\u043e\u043c\u043d\u0443\u044e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e  <a href=\"http:\/\/habrahabr.ru\/users\/qayatri\/\" class=\"user_link\">Qayatri<\/a> \u0437\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u0432 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438!     \t<\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/258195\/\"> http:\/\/habrahabr.ru\/post\/258195\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>     \t\u041f\u0440\u0438\u0432\u0435\u0442, %username%!<br \/>  \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e \u043d\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0436\u0435\u0442\u0435 \u0432 Android SDK \u2014 RecyclerView, \u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u00ab\u0440\u0435\u0446\u0435\u043f\u0442\u0430\u0445\u00bb \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043d\u0438\u043c.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"\/\/habrastorage.org\/files\/ec1\/52f\/468\/ec152f4680354ceebf397c0775fdaaeb.png\"\/><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-257402","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/257402","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=257402"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/257402\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=257402"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=257402"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=257402"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}