Android 5.0 RecyclerView 使用

RecyclerView 是5.0开始出来的新的ListView,主要是提高了性能,显示方式也多样化。

老版本中我们优化view都是通过定义一个Holder来实行的,现在的RecyclerView就封装了一个Holder

支持水平滚动和垂直滚动2种列表

还支持Grid格子布局和乱序的布局

ICON + TEXT
public class Item {

    public int imgId;
    public String desc;

    public Item(String desc, int imgId) {
        this.desc = desc;
        this.imgId = imgId;
    }
}

简单的Holder

public class MyViewHolder extends RecyclerView.ViewHolder {

    public MyViewHolder(View itemView) {
        super(itemView);
    }
}
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyViewHolder> {

    private Activity activity;
    private List<Item> list;

    public MyRecyclerAdapter (Activity act, List<Item> list) {
        this.activity = act;
        this.list = list;
    }

    @Override  //绑定一个UI作为Holder 提高性能
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(activity).inflate(R.layout.recy_item,null);
        MyViewHolder holder = new MyViewHolder(v);
        return holder;
    }

    //设置数据
    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        Item item = list.get(position);
        TextView text1 = (TextView) holder.itemView.findViewById(R.id.text) ;
        text1.setText(item.desc);
        ImageView img = (ImageView) holder.itemView.findViewById(R.id.img);
        img.setImageResource(item.imgId);
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

}

recy_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:orientation="horizontal"
    >

    <ImageView
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:id = "@+id/img"
        android:scaleType="fitCenter"
        android:layout_marginLeft="2dp"
        android:layout_gravity="center_vertical"
        />

     <TextView
         android:id="@+id/text"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginLeft="3dp"
         android:layout_marginTop="5dp"
         android:textColor="#336699"
         android:textSize="18sp"
         />

</LinearLayout>
public class MainActivity extends ActionBarActivity {

    private List<Item> itemList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        String title = "To travel hopefully is a better thing than to arrive";
  //    String title = "";
        itemList = new ArrayList<Item>(5);
        itemList.add(new Item(title,R.drawable.cat0));
        itemList.add(new Item(title,R.drawable.cat0));
        itemList.add(new Item(title,R.drawable.cat2));
        itemList.add(new Item(title,R.drawable.cat3));
        itemList.add(new Item(title,R.drawable.cat4));
        itemList.add(new Item(title,R.drawable.cat4));
        itemList.add(new Item(title,R.drawable.cat3));
        itemList.add(new Item(title,R.drawable.cat2));
        itemList.add(new Item(title,R.drawable.cat3));
        itemList.add(new Item(title,R.drawable.cat2));
        itemList.add(new Item(title,R.drawable.cat4));
        itemList.add(new Item(title,R.drawable.cat4));
        itemList.add(new Item(title,R.drawable.cat4));
        itemList.add(new Item(title,R.drawable.cat0));
        itemList.add(new Item(title,R.drawable.cat3));

        RecyclerView list = (RecyclerView) findViewById(R.id.listview);
    //    LinearLayoutManager mg = new LinearLayoutManager(this);

        //水平或垂直摆放,可以不用 HorizontalScrollView
   //     mg.setOrientation(LinearLayoutManager.HORIZONTAL);

       GridLayoutManager mg = new GridLayoutManager(this,3);//格子摆放
     //交错性的摆放,有点win8那种格子风格,最好使用CardView作为item,有边框和圆角
    //    StaggeredGridLayoutManager mg = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
       list.setLayoutManager(mg);
        MyRecyclerAdapter adapter = new MyRecyclerAdapter(this, itemList);
        list.setAdapter(adapter);
    } }
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id = "@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height = "fill_parent"
        />

</RelativeLayout>

几种运行情况:

正常的List View

水平滚动

格子情况

GridLayoutManager mg = new GridLayoutManager(this,3); //3列

混合交错的。我们的图片需要动态大小,才能看到效果。把文字注释掉,只显示图片。

StaggeredGridLayoutManager mg = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);

    public void onBindViewHolder(MyViewHolder holder, int position) {
        Item item = list.get(position);
        TextView text1 = (TextView) holder.itemView.findViewById(R.id.text) ;
        text1.setText(item.desc);
        ImageView img = (ImageView) holder.itemView.findViewById(R.id.img);

        int ww = 60 + (int)(position * new Random().nextInt(100));
        if (ww > 300) {
            ww = 200;//每个图片太宽不好看,计算一个恰当值
        }
        img.getLayoutParams().width = ww;
        img.getLayoutParams().height = 50 + (int)(position * new Random().nextInt(50));//随机高宽
        img.setImageResource(item.imgId);
    }

交错的这种 内容大小是不固定的,所以建议用CardView 可以有边框效果

这个演示较为简单,基本用法就这些。

时间: 2024-11-08 19:10:38

Android 5.0 RecyclerView 使用的相关文章

ym—— Android 5.0学习之CardView

前言 CardView顾名思义,就是想卡片一样的控件,如图: Android 5.0之前,我们有两种方案做出这种效果: 1.通过设置背景图 2.设置配置Shape文件 而现在我们需要麻烦美工MM,也不需要配置麻烦的Shape文件,只需要简单的设置几个属性即可,那就是用我们CardView CardView CardView继承了FrameLayout类,并让你在里面的卡片中(显示)有跨平台一致性的外观.CardView控件可以有阴影和圆角(效果). 要创建具有阴影效果的卡片,可以使用card_v

Eclipse中使用recyclerview时出现Caused by: java.lang.NoClassDefFoundError: android.support.v7.recyclerview.R$styleable

转自: http://blog.csdn.net/chenleicpp/article/details/46848785 程序崩溃,错误提示: Caused by: java.lang.NoClassDefFoundError: android.support.v7.recyclerview.R$styleable 原因: 在eclipse中使用RecyclerView,编译没有问题,但是运行时候会出现如下错误,百思不得其解,又说v4包与v7包版本不一致,有说没有导入v7-compat包的,经反

Android最新组件RecyclerView,替代ListView

转载请注明出处:http://blog.csdn.net/allen315410/article/details/40379159 万众瞩目的android最新5.0版本号不久前已经正式公布了,对于我这样对新事物不感冒的人来说,自然也是会关注的,除了新的android5.0带来的新的UI设计和用户体验之外,最让android程序猿感兴趣的是5.0版本号的sdk和一大堆新的API.5.0据说是额外添加或者改动了5000个API,新增了一些新的组件,以下介绍的RecyclerView就是当中之中的一

【译】Android 6.0 Changes (机翻加轻微人工校对)

Android 6.0 Changes In this document Runtime Permissions Doze and App Standby Apache HTTP Client Removal BoringSSL Access to Hardware Identifiers Notifications AudioManager Changes Text Selection Browser Bookmark Changes Android Keystore Changes Wi-F

Android自学历程—RecyclerView的使用(2)

Introduction to RecyclerView RecyclerView在Android 5中被介绍,在 Support-V7的包中.她允许展示items在随意任何之处(可联想ListView),正如包名所说的,在API7以上均可使用(Android 22).   她的名字来自于其工作的方式,当一个Item被隐藏时,不是去destroyed她并且随后为每一个新new出来的对象去创建一个新的item,隐藏的item被回收:她们被重用,并且会有新的数据绑定她们. 一个RccyclerVie

Android自学历程—RecyclerView的使用

在网上看见有关RecyclerView的介绍,说是ListView的进阶版,官方推荐,便找来资料,耍耍. 首先挂上官方的教程,官方是最具权威和最让人信服的第一手资料. https://developer.android.com/training/material/lists-cards.html To create complex lists and cards with material design styles in your apps, you can use the RecyclerV

Android 6.0 Marshmallow介绍

Android 6.0 Marshmallow介绍 Android 6.0 (M) 为用户和应用开发者提供了新功能.本文旨在介绍其中最值得关注的 API和重点介绍您应该了解并在开发应用时加以考虑的一些主要变更. 1.Android 6.0新增功能与特性 指纹身份验证: 此版本提供了一些新的 API,在受支持的设备上,用户只需扫描其指纹即可完成身份验证,这些 API 还可与 Android 密钥库系统结合使用. 要通过指纹扫描验证用户身份,请获取新 FingerprintManager 类的实例,

Android 5.0 API

Android 5.0 API 在本文档中展开 更新目标 API 级别 重要的行为变更 界面 通知 图形 媒体 存储 无线和连接 Project Volta Android 在办公和教育中的应用 系统 打印框架 测试和辅助功能 IME 清单声明 API Differences API level 20 to 21 ? L Developer Preview to 21 ? See Also Android 5.0 Behavior Changes Android Lollipop Highlig

Android 6.0 Changes

Android 6.0 变化   Android 6.0 Changes In this document 运行时权限Runtime Permissions Doze and App Standby 阿帕奇 HTTPClient 移除 Apache HTTP Client Removal OpenSSL 的分支 BoringSSL BoringSSL 访问硬件标识 Access to Hardware Identifiers 通知 Notifications 音频管理变化 AudioManage