Android RecyclerView使用Demo

来源:互联网 发布:兄弟连php就业班项目 编辑:程序博客网 时间:2024/04/29 22:42

1.RecyclerView,源码中的定义:

A flexible view for providing a limited window into a large data set.

简单的说法就是在有限的空间里展示大量的数据。
2.使用前准备:

(1).首先要建立两个layout文件:一个是引入RecyclerView组件,另一个是RecyclerView中的item布局,这一点跟ListView类似。
引入RecyclerView组件(fragment_reports_list.xml,该文件中需要引用item的布局文件):

<?xml version="1.0" encoding="utf-8"?><android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/list"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginLeft="16dp"android:layout_marginRight="16dp"app:layoutManager="LinearLayoutManager"//引用item的布局文件tools:listitem="@layout/fragment_news" />

RecyclerView中的item布局(fragment_news.xml):

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:orientation="horizontal">    <TextView        android:id="@+id/id"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_margin="@dimen/text_margin"        android:textAppearance="?attr/textAppearanceListItem" />    <TextView        android:id="@+id/content"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_margin="@dimen/text_margin"        android:textAppearance="?attr/textAppearanceListItem" /></LinearLayout>

(2):同ListView一样,RecyclerView也需要实现自己的adapter,只是RecyclerView的adapter需要继承RecyclerView.Adapter而不是BaseAdapter。实现RecyclerView的adapter:

public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder>{        List<DummyContent.DummyItem> list;        public MyRecyclerViewAdapter(List<DummyContent.DummyItem> list){            this.list = list;        }        @Override        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_news, parent, false);            return new ViewHolder(view);        }        @Override        public void onBindViewHolder(ViewHolder holder, int position) {            holder.mItem = list.get(position);            final String itemId = list.get(position).id;            holder.mIdView.setText(list.get(position).id);            holder.mContentView.setText(list.get(position).content);            holder.mContentView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    //组件点击事件                }            });        }        @Override        public int getItemCount() {            return list.size();        }        public class ViewHolder extends RecyclerView.ViewHolder{            public final View mView;            public final TextView mIdView;            public final TextView mContentView;            public DummyContent.DummyItem mItem;            public ViewHolder(View view) {                super(view);                mView = view;                mIdView = (TextView) view.findViewById(R.id.id);                mContentView = (TextView) view.findViewById(R.id.content);            }            @Override            public String toString() {                return super.toString() + " '" + mContentView.getText() + "'";            }        }    }

这里的DummyContent.DummyItem和DummyContent使用官方demo自带的定义类:

import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * Helper class for providing sample content for user interfaces created by * Android template wizards. * <p/> * TODO: Replace all uses of this class before publishing your app. */public class DummyContent {    /**     * An array of sample (dummy) items.     */    public static final List<DummyItem> ITEMS = new ArrayList<DummyItem>();    /**     * A map of sample (dummy) items, by ID.     */    public static final Map<String, DummyItem> ITEM_MAP = new HashMap<String, DummyItem>();    private static final int COUNT = 25;    static {        // Add some sample items.        for (int i = 1; i <= COUNT; i++) {            addItem(createDummyItem(i));        }    }    private static void addItem(DummyItem item) {        ITEMS.add(item);        ITEM_MAP.put(item.id, item);    }    private static DummyItem createDummyItem(int position) {        return new DummyItem(String.valueOf(position), "Item " + position, makeDetails(position));    }    private static String makeDetails(int position) {        StringBuilder builder = new StringBuilder();        builder.append("Details about Item: ").append(position);        for (int i = 0; i < position; i++) {            builder.append("\nMore details information here.");        }        return builder.toString();    }    /**     * A dummy item representing a piece of content.     */    public static class DummyItem {        public final String id;        public final String content;        public final String details;        public DummyItem(String id, String content, String details) {            this.id = id;            this.content = content;            this.details = details;        }        @Override        public String toString() {            return content;        }    }}

(3).最后就是在fragment或者activity中开始使用RecyclerView:

View view = inflater.inflate(R.layout.fragment_reports_list, container, false);RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.list);MyRecyclerViewAdapter adapter = new MyRecyclerViewAdapter(DummyContent.ITEMS);recyclerView.setAdapter(adapter);

利用Android studio新建工程时选择Master/Detail Flow时可以自动生成关于RecyclerView的demo。

0 0
原创粉丝点击