Android 5.0 RecyclerView 使用

来源:互联网 发布:单片机pwm模块长啥样 编辑:程序博客网 时间:2024/04/29 03:41

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 可以有边框效果


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


2 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 李贞将军有关电影小腿肌腱疼怎么办 朋友老婆老是背地里说我坏话怎么办 当你听到别人在背后说你时怎么办 分手了和前任是同事需要见面怎么办 和附近的人聊天他约你见面怎么办 微信约妹子发完红包拉黑了怎么办 户口本被前妻扣着不能结婚怎么办 部队当兵户口没注销退伍回去怎么办 没打疫苗的狗狗咬了我的嘴巴怎么办 新车被撞了还没上牌怎么办? 签了合同上两天班想辞职怎么办 刚到公司上班两天想辞职怎么办 签入职合同一天后就不想干了怎么办 入职材料交了第二天就想离职怎么办 宝宝40周多了还不想出来怎么办 工厂上班不到三个月不给辞工怎么办 单位辞职后不上班了保险怎么办 药流6个小时没流下来怎么办 小孩有口臭怎么办这几天不想吃饭 七个月宝宝口臭不想吃饭怎么办啊 老公工作累想要辞职不上班怎么办 药物流产后第6天咋下坠的怎么办 药流第一天胎囊没有掉下来怎么办 药流还有一点没流干净怎么办 3个月的宝宝被电了一下怎么办 宝宝吃奶粉过敏下巴红有疙瘩怎么办 小孩牙齿没掉又长出新牙怎么办 8个月婴儿地包天怎么办 欠别人很多钱 要告我怎么办 ps意外的遇到文件尾损坏了怎么办 长期作息不规律引起的头疼怎么办 退休年龄到了社保没满15年怎么办 要退休了单位把我工资表丢了怎么办 非工伤单位不支付病假工资怎么办 十个月宝宝咳嗽有痰怎么办崔玉涛 怀孕五个月胎儿脐带绕颈怎么办 6个月宝宝白天睡眠不好怎么办 22个月宝宝身高才79公分怎么办 宝宝十个月了还没长牙怎么办 腰椎间盘突出翻身都困难了怎么办 上课很困怎么办犯困快速清醒的绝招