RecycleView基本使用

RecyclerView是ListView的升级版,它具备了更好的性能,且更容易使用。和ListView一样,RecyclerView是用来显示大量数据的容器,并通过复用有限数量的View,来提高滚动时的性能。当你的视图上的元素经常动态的且有规律的改变时候,可以使用RecyclerView控件。

与ListView不同的是RecyclerView现在不再负责布局,只专注于复用机制,布局交由LayoutManager来管理。
RecyclerView仍然通过Adapter来获取需要显示的对象。

RecyclerView.png

1 布局

SwipeRefreshLayout 作下拉刷新用

<android.support.v4.widget.SwipeRefreshLayout
    android:id="@+id/swip_refresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycle_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</android.support.v4.widget.SwipeRefreshLayout>

2 代码

1 创建DataBean

public class DataBean {

    public int iconRes;
    public String des;

    public DataBean(int iconRes, String des) {
        this.iconRes = iconRes;
        this.des = des;
    }
}

2 创建Adapter与Viewhodler

/**
 * Created by cynic on 2016/5/27.
 */
public class ListAdapter extends    RecyclerView.Adapter<ListAdapter.ListHolder> {


    private Context context;
    private List<DataBean> datas;

    public ListAdapter(Context context, List<DataBean> datas) {
        this.context = context;
        this.datas = datas;
    }

    @Override
    public ListHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = View.inflate(context, R.layout.item_list, null);
        return new ListHolder(view);
    }

    @Override
    public void onBindViewHolder(ListHolder holder, int position) {
        holder.refreshDataUI(datas.get(position));//数据显示
    }

    @Override
    public int getItemCount() {
        if (datas != null) {
            return datas.size();
        }
        return 0;
    }

    public class ListHolder extends RecyclerView.ViewHolder {

        private ImageView iv;
        private TextView tv;

        public ListHolder(View itemView) {
            super(itemView);
            iv = (ImageView) itemView.findViewById(R.id.item_list_iv);
            tv = (TextView) itemView.findViewById(R.id.item_list_tv);
        }

        public void refreshDataUI(DataBean dataBean) {
            iv.setImageResource(dataBean.iconRes);
            tv.setText(dataBean.des);
        }
    }

}

3 给recycleview设置adapter和layoutmanager adapter

//listview 垂直显示
private void initRecycleListV() {
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getBaseContext(),
            LinearLayoutManager.VERTICAL, false);
    mRecycleView.setLayoutManager(layoutManager);
    ListAdapter adapter = new ListAdapter(getBaseContext(), datas);
    mRecycleView.setAdapter(adapter);
}
//listview 水平显示
private void initRecycleListH() {
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getBaseContext(),
            LinearLayoutManager.HORIZONTAL, false);
    mRecycleView.setLayoutManager(layoutManager);
    ListAdapter adapter = new ListAdapter(getBaseContext(), datas);
    mRecycleView.setAdapter(adapter);
}
//gridview 垂直显示
private void initRecycleGridV() {
    RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getBaseContext(), 2);
    mRecycleView.setLayoutManager(layoutManager);
    ListAdapter adapter = new ListAdapter(getBaseContext(), datas);
    mRecycleView.setAdapter(adapter);
}
//gridview 水平显示
private void initRecycleGridH() {
    RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getBaseContext(), 2,
            LinearLayoutManager.HORIZONTAL, false);
    mRecycleView.setLayoutManager(layoutManager);
    ListAdapter adapter = new ListAdapter(getBaseContext(), datas);
    mRecycleView.setAdapter(adapter);
}

5 瀑布流

1 item布局

CardView 包裹的内容以卡片显示,字布局为LinearLayout包裹时,设置layout_width="match_parent"
不起作用,不知为何。其Adapter、ViewHolder与上一个相似,这里不在记录。

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="5dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="5dp">

        <ImageView
            android:id="@+id/item_straggered_iv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scaleType="centerCrop"
            android:src="@mipmap/ic_launcher" />

        <TextView
            android:id="@+id/item_straggered_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/item_straggered_iv"
            android:layout_centerHorizontal="true"
            android:gravity="center"
            android:text="gagaga"
            android:textColor="#212121"
            android:textSize="16sp" />
    </RelativeLayout>
</android.support.v7.widget.CardView>
代码设置
//瀑布流 垂直显示
private void initRecycleStraggeredV() {
    RecyclerView.LayoutManager layoutManager = new StaggeredGridLayoutManager(2,LinearLayoutManager.VERTICAL);
    mRecycleView.setLayoutManager(layoutManager);
    StraggeredAdapter adapter = new StraggeredAdapter(getBaseContext(), mStraggeredDatas);
    mRecycleView.setAdapter(adapter);
}
//瀑布流 水平显示
private void initRecycleStraggeredH() {
    RecyclerView.LayoutManager layoutManager = new StaggeredGridLayoutManager(2,LinearLayoutManager.HORIZONTAL);
    mRecycleView.setLayoutManager(layoutManager);
    StraggeredAdapter adapter = new StraggeredAdapter(getBaseContext(), mStraggeredDatas);
    mRecycleView.setAdapter(adapter);
}

//设置下拉刷新
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
    @Override
    public void onRefresh() {
        new Thread(){
            @Override
            public void run() {
                SystemClock.sleep(2000);
                MainActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        swipeRefreshLayout.setRefreshing(false);
                        mRecycleView.getAdapter().notifyDataSetChanged();
                    }
                });
            }
        }.start();
    }
});

github 地址 https://github.com/cynicgit/android5.0demo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容