{"id":50741,"date":"2023-12-23T10:31:40","date_gmt":"2023-12-23T02:31:40","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/android%e7%9a%84recyclerview%e6%8b%96%e6%94%be%e5%8a%9f%e8%83%bd\/"},"modified":"2023-12-23T15:25:37","modified_gmt":"2023-12-23T07:25:37","slug":"android%e7%9a%84recyclerview%e6%8b%96%e6%94%be%e5%8a%9f%e8%83%bd","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/android%e7%9a%84recyclerview%e6%8b%96%e6%94%be%e5%8a%9f%e8%83%bd\/","title":{"rendered":"Android\u7684RecyclerView\u62d6\u653e\u529f\u80fd"},"content":{"rendered":"<p>\u5728\u8fd9\u4e2a\u6559\u7a0b\u4e2d\uff0c\u6211\u4eec\u5c06\u8ba8\u8bba\u5e76\u5728Android\u5e94\u7528\u7a0b\u5e8f\u4e2d\u5b9e\u73b0RecyclerView\u7684\u62d6\u653e\u529f\u80fd\u3002\u6211\u4eec\u5df2\u7ecf\u5728\u4e4b\u524d\u7684\u6559\u7a0b\u4e2d\u8ba8\u8bba\u8fc7\u6ed1\u52a8\u5220\u9664\u529f\u80fd\u3002<\/p>\n<h2>RecyclerView \u62d6\u62fd\u548c\u653e\u7f6e<\/h2>\n<p>\u53ef\u4ee5\u4f7f\u7528ItemTouchHelper\u5b9e\u7528\u7c7b\u5c06\u201c\u62d6\u653e\u201d\u529f\u80fd\u6dfb\u52a0\u5230RecyclerView\u4e2d\u3002\u4ee5\u4e0b\u662fItemTouchHelper.Callback\u63a5\u53e3\u4e2d\u9700\u8981\u5b9e\u73b0\u7684\u91cd\u8981\u65b9\u6cd5\uff1a<\/p>\n<ul class=\"post-ul\">\n<li>isLongPressDragEnabled &#8211; return true here to enable long press on the RecyclerView rows for drag and drop.<\/li>\n<li>isItemViewSwipeEnabled &#8211; This is used to enable or disable swipes. In this tutorial, we\u2019ll disable this.<\/li>\n<li>getMovementFlags &#8211; Here we pass the flags for the directions of drag and swipe. Since swipe is disable we pass 0 for it.<\/li>\n<li>onMove &#8211; Here we set the code for the drag and drop. onSwipe &#8211; Here we implement the code for swiping. We\u2019ll keep this empty in the current tutorial.<\/li>\n<li>onSelectedChanged &#8211; Based on the current state of the RecyclerView and whether it\u2019s pressed or swiped, this method gets triggered. Here we can customize the RecyclerView row. For example, changing the background color.<\/li>\n<li>clearView &#8211; This method gets triggered when the user interaction stops with the RecyclerView row.<\/li>\n<\/ul>\n<p>\u8ba9\u6211\u4eec\u4f7f\u7528RecyclerView\u7684\u62d6\u653e\u529f\u80fd\u5f00\u59cb\u6784\u5efa\u6211\u4eec\u7684\u5b89\u5353\u5e94\u7528\u7a0b\u5e8f\u3002<\/p>\n<h3>\u9879\u76ee\u7ed3\u6784<\/h3>\n<\/p>\n<h3>\u7de8\u78bc<\/h3>\n<p>\u4ee5\u4e0b\u662f\u5305\u542b\u4e00\u4e2a RecyclerView \u7684 activity_main.xml \u5e03\u5c40\u7684\u4ee3\u7801\uff1a<\/p>\n<pre class=\"post-pre\"><code>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;LinearLayout xmlns:android=\"https:\/\/schemas.android.com\/apk\/res\/android\"\r\n    xmlns:app=\"https:\/\/schemas.android.com\/apk\/res-auto\"\r\n    xmlns:tools=\"https:\/\/schemas.android.com\/tools\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"match_parent\"\r\n    tools:context=\".MainActivity\"&gt;\r\n\r\n\r\n    &lt;android.support.v7.widget.RecyclerView\r\n        android:id=\"@+id\/recyclerView\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:orientation=\"vertical\"\r\n        app:layoutManager=\"android.support.v7.widget.LinearLayoutManager\" \/&gt;\r\n\r\n\r\n&lt;\/LinearLayout&gt;\r\n<\/code><\/pre>\n<p>\u4e0b\u9762\u662fMainActivity.java\u7684\u4ee3\u7801\uff1a<\/p>\n<pre class=\"post-pre\"><code>package com.Olivia.androidrecyclerviewdraganddrop;\r\n\r\nimport android.support.v7.app.AppCompatActivity;\r\nimport android.os.Bundle;\r\nimport android.support.v7.widget.RecyclerView;\r\nimport android.support.v7.widget.helper.ItemTouchHelper;\r\n\r\nimport java.util.ArrayList;\r\n\r\npublic class MainActivity extends AppCompatActivity {\r\n\r\n    RecyclerView recyclerView;\r\n    RecyclerViewAdapter mAdapter;\r\n    ArrayList&lt;String&gt; stringArrayList = new ArrayList&lt;&gt;();\r\n\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setContentView(R.layout.activity_main);\r\n\r\n        recyclerView = findViewById(R.id.recyclerView);\r\n\r\n        populateRecyclerView();\r\n    }\r\n\r\n    private void populateRecyclerView() {\r\n        stringArrayList.add(\"Item 1\");\r\n        stringArrayList.add(\"Item 2\");\r\n        stringArrayList.add(\"Item 3\");\r\n        stringArrayList.add(\"Item 4\");\r\n        stringArrayList.add(\"Item 5\");\r\n        stringArrayList.add(\"Item 6\");\r\n        stringArrayList.add(\"Item 7\");\r\n        stringArrayList.add(\"Item 8\");\r\n        stringArrayList.add(\"Item 9\");\r\n        stringArrayList.add(\"Item 10\");\r\n\r\n        mAdapter = new RecyclerViewAdapter(stringArrayList);\r\n\r\n        ItemTouchHelper.Callback callback =\r\n                new ItemMoveCallback(mAdapter);\r\n        ItemTouchHelper touchHelper = new ItemTouchHelper(callback);\r\n        touchHelper.attachToRecyclerView(recyclerView);\r\n\r\n        recyclerView.setAdapter(mAdapter);\r\n    }\r\n\r\n}\r\n\r\n<\/code><\/pre>\n<p>\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u7528\u4e00\u4e2a\u5b57\u7b26\u4e32\u7684ArrayList\u586b\u5145\u4e86\u4e00\u4e2aRecyclerViewAdapter.java\u7c7b\u3002\u6211\u4eec\u5728RecyclerView\u4e0a\u9644\u52a0\u4e86\u4e00\u4e2aItemMoveCallback.java\u7c7b\u7684\u5b9e\u4f8b\uff0c\u4ee5\u542f\u52a8\u62d6\u653e\u64cd\u4f5c\u3002\u8ba9\u6211\u4eec\u770b\u770b\u8fd9\u4e9b\u6587\u4ef6\u7684\u6bcf\u4e00\u4e2a\u3002ItemMoveCallback.java\u7c7b\u7684\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<pre class=\"post-pre\"><code>package com.Olivia.androidrecyclerviewdraganddrop;\r\n\r\nimport android.support.annotation.NonNull;\r\nimport android.support.v7.widget.RecyclerView;\r\nimport android.support.v7.widget.helper.ItemTouchHelper;\r\n\r\npublic class ItemMoveCallback extends ItemTouchHelper.Callback {\r\n\r\n    private final ItemTouchHelperContract mAdapter;\r\n\r\n    public ItemMoveCallback(ItemTouchHelperContract adapter) {\r\n        mAdapter = adapter;\r\n    }\r\n\r\n    @Override\r\n    public boolean isLongPressDragEnabled() {\r\n        return true;\r\n    }\r\n\r\n    @Override\r\n    public boolean isItemViewSwipeEnabled() {\r\n        return false;\r\n    }\r\n\r\n\r\n\r\n    @Override\r\n    public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) {\r\n\r\n    }\r\n\r\n    @Override\r\n    public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {\r\n        int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;\r\n        return makeMovementFlags(dragFlags, 0);\r\n    }\r\n\r\n    @Override\r\n    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,\r\n                          RecyclerView.ViewHolder target) {\r\n        mAdapter.onRowMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition());\r\n        return true;\r\n    }\r\n\r\n    @Override\r\n    public void onSelectedChanged(RecyclerView.ViewHolder viewHolder,\r\n                                  int actionState) {\r\n\r\n\r\n        if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) {\r\n            if (viewHolder instanceof RecyclerViewAdapter.MyViewHolder) {\r\n                RecyclerViewAdapter.MyViewHolder myViewHolder=\r\n                        (RecyclerViewAdapter.MyViewHolder) viewHolder;\r\n                mAdapter.onRowSelected(myViewHolder);\r\n            }\r\n\r\n        }\r\n\r\n        super.onSelectedChanged(viewHolder, actionState);\r\n    }\r\n    @Override\r\n    public void clearView(RecyclerView recyclerView,\r\n                          RecyclerView.ViewHolder viewHolder) {\r\n        super.clearView(recyclerView, viewHolder);\r\n\r\n        if (viewHolder instanceof RecyclerViewAdapter.MyViewHolder) {\r\n            RecyclerViewAdapter.MyViewHolder myViewHolder=\r\n                    (RecyclerViewAdapter.MyViewHolder) viewHolder;\r\n            mAdapter.onRowClear(myViewHolder);\r\n        }\r\n    }\r\n\r\n    public interface ItemTouchHelperContract {\r\n\r\n        void onRowMoved(int fromPosition, int toPosition);\r\n        void onRowSelected(RecyclerViewAdapter.MyViewHolder myViewHolder);\r\n        void onRowClear(RecyclerViewAdapter.MyViewHolder myViewHolder);\r\n\r\n    }\r\n\r\n}\r\n\r\n<\/code><\/pre>\n<p>\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u5b9a\u4e49\u4e86\u4e00\u4e2a\u63a5\u53e3ItemTouchHelperContract\u3002\u5b83\u7684\u6bcf\u4e2a\u65b9\u6cd5\u90fd\u4f1a\u4eceItemTouchHelper.Callback\u63a5\u53e3\u7684\u5b9e\u73b0\u65b9\u6cd5\u4e2d\u88ab\u8c03\u7528\u3002RecyclerViewAdapter.java\u7c7b\u7684\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<pre class=\"post-pre\"><code>package com.Olivia.androidrecyclerviewdraganddrop;\r\n\r\nimport android.graphics.Color;\r\nimport android.support.v7.widget.RecyclerView;\r\nimport android.view.LayoutInflater;\r\nimport android.view.View;\r\nimport android.view.ViewGroup;\r\nimport android.widget.TextView;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.Collections;\r\n\r\npublic class RecyclerViewAdapter extends RecyclerView.Adapter&lt;RecyclerViewAdapter.MyViewHolder&gt; implements ItemMoveCallback.ItemTouchHelperContract {\r\n\r\n    private ArrayList&lt;String&gt; data;\r\n\r\n    public class MyViewHolder extends RecyclerView.ViewHolder {\r\n\r\n        private TextView mTitle;\r\n        View rowView;\r\n\r\n        public MyViewHolder(View itemView) {\r\n            super(itemView);\r\n\r\n            rowView = itemView;\r\n            mTitle = itemView.findViewById(R.id.txtTitle);\r\n        }\r\n    }\r\n\r\n    public RecyclerViewAdapter(ArrayList&lt;String&gt; data) {\r\n        this.data = data;\r\n    }\r\n\r\n    @Override\r\n    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\r\n        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_row, parent, false);\r\n        return new MyViewHolder(itemView);\r\n    }\r\n\r\n    @Override\r\n    public void onBindViewHolder(MyViewHolder holder, int position) {\r\n        holder.mTitle.setText(data.get(position));\r\n    }\r\n\r\n\r\n    @Override\r\n    public int getItemCount() {\r\n        return data.size();\r\n    }\r\n\r\n\r\n    @Override\r\n    public void onRowMoved(int fromPosition, int toPosition) {\r\n        if (fromPosition &lt; toPosition) {\r\n            for (int i = fromPosition; i &lt; toPosition; i++) {\r\n                Collections.swap(data, i, i + 1);\r\n            }\r\n        } else {\r\n            for (int i = fromPosition; i &gt; toPosition; i--) {\r\n                Collections.swap(data, i, i - 1);\r\n            }\r\n        }\r\n        notifyItemMoved(fromPosition, toPosition);\r\n    }\r\n\r\n    @Override\r\n    public void onRowSelected(MyViewHolder myViewHolder) {\r\n        myViewHolder.rowView.setBackgroundColor(Color.GRAY);\r\n\r\n    }\r\n\r\n    @Override\r\n    public void onRowClear(MyViewHolder myViewHolder) {\r\n        myViewHolder.rowView.setBackgroundColor(Color.WHITE);\r\n\r\n    }\r\n}\r\n\r\n\r\n<\/code><\/pre>\n<p>\u5f53\u62d6\u62fd\u548c\u653e\u4e0b\u64cd\u4f5c\u5b8c\u6210\u65f6\uff0c\u4e4b\u524d\u5728Contract\u63a5\u53e3\u4e2d\u5b9a\u4e49\u7684onRowMoved\u4f1a\u88ab\u8c03\u7528\u3002\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u4ea4\u6362\u6570\u7ec4\u5217\u8868\u4e2d\u4e24\u4e2a\u884c\u7684\u4f4d\u7f6e\uff0c\u5e76\u8c03\u7528notifyItemMoved\u6765\u5237\u65b0\u9002\u914d\u5668\u3002\u4e0a\u8ff0\u5e94\u7528\u7a0b\u5e8f\u7684\u8f93\u51fa\u5982\u4e0b\u6240\u793a\uff1a\u5230\u76ee\u524d\u4e3a\u6b62\uff0c\u6211\u4eec\u901a\u8fc7\u5728RecyclerView\u7684\u884c\u4e2d\u7684\u4efb\u610f\u4f4d\u7f6e\u6309\u4e0b\u6765\u8fdb\u884c\u62d6\u62fd\u548c\u653e\u4e0b\u64cd\u4f5c\u3002\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u770b\u5230\u5982\u4f55\u4ec5\u901a\u8fc7\u6309\u4e0bRecyclerView\u884c\u5185\u7684\u7279\u5b9a\u89c6\u56fe\u6765\u6267\u884c\u76f8\u540c\u7684\u64cd\u4f5c\u3002<\/p>\n<h3>\u4f7f\u7528\u624b\u67c4\u8fdb\u884c\u62d6\u653e<\/h3>\n<p>\u4e3a\u4e86\u4f7f\u7528\u7279\u5b9a\u7684\u53e5\u67c4\u89c6\u56fe\u8fdb\u884c\u62d6\u653e\u64cd\u4f5c\uff0c\u6211\u4eec\u9700\u8981\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u8fdb\u884c\uff1a\u5c06isLongPressDragEnabled\u8bbe\u7f6e\u4e3afalse\uff0c\u4ee5\u7981\u7528\u9ed8\u8ba4\u7684\u62d6\u653e\u529f\u80fd\u3002\u521b\u5efa\u4e00\u4e2a\u7c7b\u4f3c\u7684\u63a5\u53e3\uff1a<\/p>\n<pre class=\"post-pre\"><code>public interface StartDragListener {\r\n    void requestDrag(RecyclerView.ViewHolder viewHolder);\r\n}\r\n<\/code><\/pre>\n<p>\u5c06\u5176\u5b9e\u65bd\u4e8eMainActivity\u5e76\u5c06\u5176\u4f20\u9012\u7ed9\u9002\u914d\u5668\u3002<\/p>\n<pre class=\"post-pre\"><code>@Override\r\n    public void requestDrag(RecyclerView.ViewHolder viewHolder) {\r\n        touchHelper.startDrag(viewHolder);\r\n    }\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>mAdapter = new RecyclerViewAdapter(stringArrayList,this);\r\n<\/code><\/pre>\n<p>\u5728RecyclerViewAdapter.java\u6587\u4ef6\u4e2d\u8fdb\u884c\u4ee5\u4e0b\u64cd\u4f5c\uff1a<\/p>\n<pre class=\"post-pre\"><code>holder.imageView.setOnTouchListener(new View.OnTouchListener() {\r\n            @Override\r\n            public boolean onTouch(View v, MotionEvent event) {\r\n                if (event.getAction() ==\r\n                        MotionEvent.ACTION_DOWN) {\r\n                    mStartDragListener.requestDrag(holder);\r\n                }\r\n                return false;\r\n            }\r\n        });\r\n<\/code><\/pre>\n<p>\u4f60\u53ef\u4ee5\u5728\u6559\u7a0b\u672b\u5c3e\u7684\u4e0b\u8f7d\u94fe\u63a5\u4e2d\u627e\u5230\u66f4\u65b0\u540e\u7684\u4ee3\u7801\u3002\u4f7f\u7528\u66f4\u65b0\u540e\u7684\u4ee3\u7801\uff0c\u5e94\u7528\u7684\u8f93\u51fa\u5982\u4e0b\u6240\u793a\uff1a\u6559\u7a0b\u5230\u6b64\u7ed3\u675f\u3002\u9879\u76ee\u7684\u5b8c\u6574\u6e90\u4ee3\u7801\u5982\u4e0b\u6240\u793a\uff1a<\/p>\n<p>\u5b89\u5353\u7684RecyclerView\u62d6\u653e\u529f\u80fd\u3002<\/p>\n<p>GitHub \u9879\u76ee\u94fe\u63a5<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5728\u8fd9\u4e2a\u6559\u7a0b\u4e2d\uff0c\u6211\u4eec\u5c06\u8ba8\u8bba\u5e76\u5728Android\u5e94\u7528\u7a0b\u5e8f\u4e2d\u5b9e\u73b0RecyclerView\u7684\u62d6\u653e\u529f\u80fd\u3002\u6211\u4eec\u5df2\u7ecf\u5728\u4e4b\u524d\u7684\u6559 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-50741","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Android\u7684RecyclerView\u62d6\u653e\u529f\u80fd - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/android\u7684recyclerview\u62d6\u653e\u529f\u80fd\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Android\u7684RecyclerView\u62d6\u653e\u529f\u80fd\" \/>\n<meta property=\"og:description\" content=\"\u5728\u8fd9\u4e2a\u6559\u7a0b\u4e2d\uff0c\u6211\u4eec\u5c06\u8ba8\u8bba\u5e76\u5728Android\u5e94\u7528\u7a0b\u5e8f\u4e2d\u5b9e\u73b0RecyclerView\u7684\u62d6\u653e\u529f\u80fd\u3002\u6211\u4eec\u5df2\u7ecf\u5728\u4e4b\u524d\u7684\u6559 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/android\u7684recyclerview\u62d6\u653e\u529f\u80fd\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-23T02:31:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-23T07:25:37+00:00\" \/>\n<meta name=\"author\" content=\"\u79d1, \u9896\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u79d1, \u9896\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/android%e7%9a%84recyclerview%e6%8b%96%e6%94%be%e5%8a%9f%e8%83%bd\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/android%e7%9a%84recyclerview%e6%8b%96%e6%94%be%e5%8a%9f%e8%83%bd\/\",\"name\":\"Android\u7684RecyclerView\u62d6\u653e\u529f\u80fd - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-12-23T02:31:40+00:00\",\"dateModified\":\"2023-12-23T07:25:37+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/8ca01ba7f7362ad4edb7da206a12f29e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/android%e7%9a%84recyclerview%e6%8b%96%e6%94%be%e5%8a%9f%e8%83%bd\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/android%e7%9a%84recyclerview%e6%8b%96%e6%94%be%e5%8a%9f%e8%83%bd\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/android%e7%9a%84recyclerview%e6%8b%96%e6%94%be%e5%8a%9f%e8%83%bd\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Android\u7684RecyclerView\u62d6\u653e\u529f\u80fd\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/8ca01ba7f7362ad4edb7da206a12f29e\",\"name\":\"\u79d1, \u9896\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8a6fb3cc7ba2f69d2189ba532aec4633ea7ed75ac0af162ec367cb3abc0fb2af?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8a6fb3cc7ba2f69d2189ba532aec4633ea7ed75ac0af162ec367cb3abc0fb2af?s=96&d=mm&r=g\",\"caption\":\"\u79d1, \u9896\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/keying\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/android%e7%9a%84recyclerview%e6%8b%96%e6%94%be%e5%8a%9f%e8%83%bd\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Android\u7684RecyclerView\u62d6\u653e\u529f\u80fd - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/android\u7684recyclerview\u62d6\u653e\u529f\u80fd\/","og_locale":"zh_CN","og_type":"article","og_title":"Android\u7684RecyclerView\u62d6\u653e\u529f\u80fd","og_description":"\u5728\u8fd9\u4e2a\u6559\u7a0b\u4e2d\uff0c\u6211\u4eec\u5c06\u8ba8\u8bba\u5e76\u5728Android\u5e94\u7528\u7a0b\u5e8f\u4e2d\u5b9e\u73b0RecyclerView\u7684\u62d6\u653e\u529f\u80fd\u3002\u6211\u4eec\u5df2\u7ecf\u5728\u4e4b\u524d\u7684\u6559 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/android\u7684recyclerview\u62d6\u653e\u529f\u80fd\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-12-23T02:31:40+00:00","article_modified_time":"2023-12-23T07:25:37+00:00","author":"\u79d1, \u9896","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u79d1, \u9896","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"1 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/android%e7%9a%84recyclerview%e6%8b%96%e6%94%be%e5%8a%9f%e8%83%bd\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/android%e7%9a%84recyclerview%e6%8b%96%e6%94%be%e5%8a%9f%e8%83%bd\/","name":"Android\u7684RecyclerView\u62d6\u653e\u529f\u80fd - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-12-23T02:31:40+00:00","dateModified":"2023-12-23T07:25:37+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/8ca01ba7f7362ad4edb7da206a12f29e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/android%e7%9a%84recyclerview%e6%8b%96%e6%94%be%e5%8a%9f%e8%83%bd\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/android%e7%9a%84recyclerview%e6%8b%96%e6%94%be%e5%8a%9f%e8%83%bd\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/android%e7%9a%84recyclerview%e6%8b%96%e6%94%be%e5%8a%9f%e8%83%bd\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"Android\u7684RecyclerView\u62d6\u653e\u529f\u80fd"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/8ca01ba7f7362ad4edb7da206a12f29e","name":"\u79d1, \u9896","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8a6fb3cc7ba2f69d2189ba532aec4633ea7ed75ac0af162ec367cb3abc0fb2af?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8a6fb3cc7ba2f69d2189ba532aec4633ea7ed75ac0af162ec367cb3abc0fb2af?s=96&d=mm&r=g","caption":"\u79d1, \u9896"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/keying\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/android%e7%9a%84recyclerview%e6%8b%96%e6%94%be%e5%8a%9f%e8%83%bd\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/50741","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=50741"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/50741\/revisions"}],"predecessor-version":[{"id":50789,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/50741\/revisions\/50789"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=50741"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=50741"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=50741"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}