zoukankan      html  css  js  c++  java
  • Android 新控件RecyclerView

    RecyclerView 是 android-support-v7-21 版本号中新增的一个 Widgets。

    我们能够使用RecyclerView很easy的实现横向竖向的ListView.GridView.以及瀑布流的效果.先看一下项目的实现的效果这里写图片描写叙述

    是不是很炫?使用RecyclerView能够很easy的实现.

    RecyclerView 特性
    1.不关心Item是否显示在正确的位置以及怎样显示
    2.不关心item之间怎样切割
    3.不关注Item添加与删除的动画效果
    4.它只不过关注怎样回收和复用item
    贴出部分代码:

         mRecyclerView = (RecyclerView) findViewById(R.id.rv);
            //设置它的Adapter
            myRecyclerViewListAdapater = new MyRecyclerViewListAdapater(this,sourceDatas);
            mRecyclerView.setAdapter(myRecyclerViewListAdapater);
    
    
            //设置它的LayoutManage 。 通过 LayoutManager去设置它的显示方式
            LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
            mRecyclerView.setLayoutManager(linearLayoutManager);
    
            //设置切割线
    //        dividerItemDecoration = new DividerItemDecoration(this,LinearLayoutManager.VERTICAL);
    //        mRecyclerView.addItemDecoration(dividerItemDecoration);
    
            //设置添加删除Item的动画
            mRecyclerView.setItemAnimator(new DefaultItemAnimator());
    
    
            myRecyclerViewListAdapater.setOnItemClickListener(new MyRecyclerViewListAdapater.OnItemClickListener() {
                @Override
                public void onItemClickListener(View view, int position) {
                    Toast.makeText(MainActivity.this,"click : " + position,Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public boolean onLongItemClickListener(View view, int position) {
                    myRecyclerViewListAdapater.deleteItem(position);
                    return false;
                }
            });

    Adapter代码

    public class MyRecyclerViewListAdapater extends RecyclerView.Adapter<MyRecyclerViewListAdapater.MyListHolder> {
    
        private Context context;
        protected List<String> sourceDatas;
        private LayoutInflater layoutInflater;
        public OnItemClickListener mOnItemClickListener;
    
        public MyRecyclerViewListAdapater(Context context,List<String> sourceDatas){
            this.context = context;
            this.sourceDatas = sourceDatas;
            layoutInflater = LayoutInflater.from(context);
        }
    
    
        @Override
        public MyRecyclerViewListAdapater.MyListHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
            View view = layoutInflater.inflate(R.layout.item,viewGroup,false);
            MyListHolder myListHolder = new MyListHolder(view);
    
            return myListHolder;
        }
    
        @Override
        public void onBindViewHolder(final MyListHolder viewHolder, final int i) {
            viewHolder.textView.setText(sourceDatas.get(i));
            itemClick(viewHolder);
        }
    
        /**
         * ItemView点击事件
         */
        protected void itemClick(final MyListHolder viewHolder){
    
            viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(null != mOnItemClickListener){
                        int postion = viewHolder.getLayoutPosition();
                        mOnItemClickListener.onItemClickListener(viewHolder.itemView,postion);
                    }
                }
            });
    
            viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    if(null != mOnItemClickListener){
                        int position = viewHolder.getLayoutPosition();
                        return mOnItemClickListener.onLongItemClickListener(viewHolder.itemView,position);
                    }
                    return false;
                }
            });
        }
    
        /**
         * 方法返回item的数量
         * */
        @Override
        public int getItemCount() {
            return sourceDatas.size();
        }
    
        /**
         * 加入item
         */
        public void addItem(int position){
            sourceDatas.add(position,"Add Item");
            notifyItemInserted(position);
        }
    
        /**
         * 删除Item
         */
        public void deleteItem(int positon){
            sourceDatas.remove(positon);
            notifyItemRemoved(positon);
        }
    
        /**
         * 设置item点击接口
         */
        public void setOnItemClickListener(OnItemClickListener onItemClickListener){
            this.mOnItemClickListener = onItemClickListener;
        }
    
    
        /**
         * Recycler本身并没有给我们提供ItemClick事件,这里需要我们自己实现这个接口
         * 点击接口
         * */
        public interface OnItemClickListener{
            //点击事件
            public void onItemClickListener(View view,int position);
            //长按事件
            public boolean onLongItemClickListener(View view,int position);
    
        }
    
    
        class MyListHolder extends RecyclerView.ViewHolder{
    
            TextView textView;
    
            //继承 RecyclerView.ViewHolder 必需要实现它的构造方法
            //能够看到在它的构造方法接收到一个View的參数。这个View就是我们创建的ItemView
            public MyListHolder(View itemView) {
                super(itemView);
    
                textView = (TextView) itemView.findViewById(R.id.tv_list_item);
            }
        }
    
    }
    

    布局:

    <FrameLayout 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/rv"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    </FrameLayout>

    源代码地址:http://download.csdn.net/detail/u011068996/8858869

  • 相关阅读:
    python之路day08--文件的操作
    python之路day07-集合set的增删查、列表如何排重(效率最高的方法)、深浅copy
    python之路day06-python2/3小区别,小数据池的概念,编码的进阶str转为bytes类型,编码和解码
    python之路day05--字典的增删改查,嵌套
    python之路day04--列表的增删改查,嵌套、元组的嵌套、range、for循环嵌套
    python之路day03--数据类型分析,转换,索引切片,str常用操作方法
    python之路day02--格式化输出、初始编码、运算符
    python之路day01--变量
    线程、进程、协程 异步io
    Ubuntu学习(转载)
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7252223.html
Copyright © 2011-2022 走看看