{"id":212,"date":"2019-02-02T22:49:29","date_gmt":"2019-02-02T14:49:29","guid":{"rendered":"https:\/\/sourcequest.xyz\/?p=212"},"modified":"2019-02-02T22:49:29","modified_gmt":"2019-02-02T14:49:29","slug":"swiperecyclerview-%e5%bf%ab%e9%80%9f%e6%9e%84%e5%bb%bamd%e5%8c%96%e7%9a%84recyclerview%e6%bb%91%e5%8a%a8%e8%8f%9c%e5%8d%95","status":"publish","type":"post","link":"https:\/\/sourcequest.xyz\/?p=212","title":{"rendered":"SwipeRecyclerView-\u5feb\u901f\u6784\u5efaMD\u5316\u7684RecyclerView\u6ed1\u52a8\u83dc\u5355"},"content":{"rendered":"\n<p>\u9879\u76ee\u5730\u5740\uff1a<a href=\"https:\/\/github.com\/yanzhenjie\/SwipeRecyclerView\">https:\/\/github.com\/yanzhenjie\/SwipeRecyclerView<\/a><\/p>\n\n\n\n<p>\u6b64\u9879\u76ee\u662f\u4e00\u4e2aRecyclerView\u7684\u6269\u5c55\uff0cAndroid\u63d0\u4f9b\u4e86RecyclerView\u8fd9\u4e00\u5f3a\u5927\u7684\u6eda\u52a8\u63a7\u4ef6\uff0c\u4f46\u5b9e\u9645\u4f7f\u7528\u8d77\u6765\u5374\u8f83\u4e3a\u9ebb\u70e6\u3002\u5982\u9700\u5feb\u901f\u6dfb\u52a0\u6ed1\u52a8\u83dc\u5355\uff0c\u8fd9\u4e2a\u5e93\u80fd\u5e2e\u4f60\u89e3\u51b3\u95ee\u9898\u3002<\/p>\n\n\n\n<h3>\u7279\u6027<\/h3>\n\n\n\n<ol><li>Item\u4fa7\u6ed1\u83dc\u5355\uff0c\u652f\u6301\u6c34\u5e73\u5206\u5e03\u3001\u5782\u76f4\u5206\u5e03<\/li><li>Item\u957f\u6309\u62d6\u62fd\u3001\u4fa7\u6ed1\u5220\u9664<\/li><li>\u6dfb\u52a0\/\u79fb\u9664HeaderView\/FooterView<\/li><li><strong>\u81ea\u52a8\/\u70b9\u51fb<\/strong>\u52a0\u8f7d\u66f4\u591a\u7684\u529f\u80fd<\/li><li>Sticky\u666e\u901a\u5e03\u5c40\u9ecf\u8d34\u548cReyclerView\u5206\u7ec4\u9ecf\u8d34<\/li><li><\/li><\/ol>\n\n\n\n<h3>\u5982\u4f55\u4f7f\u7528<\/h3>\n\n\n\n<p>\u5728app\u7684build.gradle\u91cc\u6dfb\u52a0\u5982\u4e0b\u4ee3\u7801:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">dependencies {\n    implementation 'com.yanzhenjie:recyclerview-swipe:1.2.3'\n}<\/pre>\n\n\n\n<p>\u4e4b\u540e\u4fbf\u53ef\u4ee5\u5728XML\u5e03\u5c40\u4e2d\u52a0\u5165SwipeRecyclerView:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView  \n    ...\/><\/pre>\n\n\n\n<p>\u4e4b\u540e\u4fbf\u53ef\u4ee5\u8bbe\u7f6e\u4fa7\u6ed1\u83dc\u5355\u4e86\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">SwipeMenuRecyclerView recyclerView = findViewById(R.id.swipeRecyclerView)\nrecyclerView.setSwipeMenuCreator((leftMenu, rightMenu, position) -> {\n    SwipeMenuItem delete = new SwipeMenuItem(coordinatorLayout.getContext())\n        .setBackgroundColorResource(R.color.colorRed)\n        .setImage(R.drawable.ic_delete_white_24dp)\n        .setHeight(MATCH_PARENT)\n        .setWidth(200);\n    leftMenu.addMenuItem(delete);\n});<\/pre>\n\n\n\n<p>Kotlin:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">val recyclerView = findViewById(R.id.swipeRecyclerView)\nrecyclerView.setSwipeMenuCreator({ \n    leftMenu, rightMenu, position->\n    val delete = SwipeMenuItem(coordinatorLayout.getContext())\n        .setBackgroundColorResource(R.color.colorRed)\n        .setImage(R.drawable.ic_delete_white_24dp)\n        .setHeight(MATCH_PARENT)\n        .setWidth(200)\n    leftMenu.addMenuItem(delete) \n})<\/pre>\n\n\n\n<p>\u4e3a\u4fa7\u6ed1\u83dc\u5355\u8bbe\u7f6e\u76d1\u542c\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">recyclerView.setSwipeMenuItemClickListener((menuBridge, position) -> {\n    menuBridge.closeMenu();\n    int direction = menuBridge.getDirection();\n    if (direction == SwipeMenuRecyclerView.LEFT_DIRECTION\n        &amp;&amp; menuBridge.getPosition() == 0) {\n            \/\/do something       \n    }\n});<\/pre>\n\n\n\n<p>Kotlin:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">recyclerView.setSwipeMenuItemClickListener({ menuBridge, position->\n    menuBridge.closeMenu()\n    val direction = menuBridge.getDirection()\n    if ((direction == SwipeMenuRecyclerView.LEFT_DIRECTION &amp;&amp; menuBridge.getPosition() === 0)) {\n         \/\/do something \n    } \n})<\/pre>\n\n\n\n<h3>\u4fa7\u6ed1\u5220\u9664\u548c\u62d6\u62fd<\/h3>\n\n\n\n<p>\u62d6\u62fd\u548c\u4fa7\u6ed1\u5220\u9664\u7684\u529f\u80fd\u9ed8\u8ba4\u5173\u95ed\u7684\uff0c\u6240\u4ee5\u5148\u8981\u6253\u5f00\u529f\u80fd\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">recyclerView.setLongPressDragEnabled(true); \/\/ \u62d6\u62fd\u6392\u5e8f\uff0c\u9ed8\u8ba4\u5173\u95ed\u3002\nrecyclerView.setItemViewSwipeEnabled(true); \/\/ \u4fa7\u6ed1\u5220\u9664\uff0c\u9ed8\u8ba4\u5173\u95ed\u3002<\/pre>\n\n\n\n<p>\u53ea\u9700\u8981\u8bbe\u7f6e\u4e0a\u9762\u4e24\u4e2a\u5c5e\u6027\u5c31\u53ef\u4ee5\u8fdb\u884c\u76f8\u5e94\u7684\u52a8\u4f5c\u4e86\uff0c\u5982\u679c\u4e0d\u9700\u8981\u54ea\u4e2a\uff0c\u4e0d\u8981\u6253\u5f00\u5c31\u53ef\u4ee5\u4e86\u3002<\/p>\n\n\n\n<p>\u7136\u540e\u76d1\u542c\u62d6\u62fd\u548c\u4fa7\u6ed1\u7684\u52a8\u4f5c\uff0c\u8fdb\u884c\u6570\u636e\u66f4\u65b0\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">recyclerView.setOnItemMoveListener(mItemMoveListener);\/\/ \u76d1\u542c\u62d6\u62fd\uff0c\u66f4\u65b0UI\u3002\n\nOnItemMoveListener mItemMoveListener = new OnItemMoveListener() {\n    @Override\n    public boolean onItemMove(ViewHolder srcHolder, ViewHolder targetHolder) {\n        \/\/ \u6b64\u65b9\u6cd5\u5728Item\u62d6\u62fd\u4ea4\u6362\u4f4d\u7f6e\u65f6\u88ab\u8c03\u7528\u3002\n        \/\/ \u7b2c\u4e00\u4e2a\u53c2\u6570\u662f\u8981\u4ea4\u6362\u4e3a\u4e4b\u7684Item\uff0c\u7b2c\u4e8c\u4e2a\u662f\u76ee\u6807\u4f4d\u7f6e\u7684Item\u3002\n        \/\/ \u4ea4\u6362\u6570\u636e\uff0c\u5e76\u66f4\u65b0adapter\u3002\n        int fromPosition = srcHolder.getAdapterPosition();\n        int toPosition = targetHolder.getAdapterPosition();\n        Collections.swap(mDataList, fromPosition, toPosition);\n        adapter.notifyItemMoved(fromPosition, toPosition);\n        \/\/ \u8fd4\u56detrue\uff0c\u8868\u793a\u6570\u636e\u4ea4\u6362\u6210\u529f\uff0cItemView\u53ef\u4ee5\u4ea4\u6362\u4f4d\u7f6e\u3002\n        return true;\n    }\n\n    @Override\n    public void onItemDismiss(ViewHolder srcHolder) {\n        \/\/ \u6b64\u65b9\u6cd5\u5728Item\u5728\u4fa7\u6ed1\u5220\u9664\u65f6\u88ab\u8c03\u7528\u3002\n        \/\/ \u4ece\u6570\u636e\u6e90\u79fb\u9664\u8be5Item\u5bf9\u5e94\u7684\u6570\u636e\uff0c\u5e76\u5237\u65b0Adapter\u3002\n        int position = srcHolder.getAdapterPosition();\n        mDataList.remove(position);\n        adapter.notifyItemRemoved(position);\n    }\n};<\/pre>\n\n\n\n<p>\u8fd8\u6709\u66f4\u591a\u529f\u80fd\uff0c\u8bf7\u5230GitHub\u9875\u9762\u67e5\u770bReadme\u3002<\/p>\n\n\n\n<p> \u8be5\u9879\u76ee\u57fa\u4e8e <a href=\"https:\/\/www.apache.org\/licenses\/LICENSE-2.0\">Apache-2.0<\/a> \u8bb8\u53ef\u8bc1\u3002 <\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9879\u76ee\u5730\u5740\uff1ahttps:\/\/github.com\/yanzhenjie\/SwipeRecyclerView \u6b64\u9879&hellip; <br \/> <a class=\"read-more\" href=\"https:\/\/sourcequest.xyz\/?p=212\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":213,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[5,4,10],"tags":[7,6,9],"_links":{"self":[{"href":"https:\/\/sourcequest.xyz\/index.php?rest_route=\/wp\/v2\/posts\/212"}],"collection":[{"href":"https:\/\/sourcequest.xyz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sourcequest.xyz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sourcequest.xyz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sourcequest.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=212"}],"version-history":[{"count":1,"href":"https:\/\/sourcequest.xyz\/index.php?rest_route=\/wp\/v2\/posts\/212\/revisions"}],"predecessor-version":[{"id":214,"href":"https:\/\/sourcequest.xyz\/index.php?rest_route=\/wp\/v2\/posts\/212\/revisions\/214"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sourcequest.xyz\/index.php?rest_route=\/wp\/v2\/media\/213"}],"wp:attachment":[{"href":"https:\/\/sourcequest.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=212"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sourcequest.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=212"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sourcequest.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=212"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}