RecyclerView使用进阶(一)

来源:互联网 发布:反网络爬虫 编辑:程序博客网 时间:2024/05/18 13:43

终于开始自己记录自己的学习Android之路。一方面为了自己以后可以更方便的查找,另一方面也可以时常复习。

     当我还用着ListView的时候,换到了另外一家公司。老大交给我一些任务,到了要交差的时候,老大review了我的代码,皱了一下眉头,说我这完成百分之三十都不到,然后继续忙了,把我剩下的任务,交给南海龙王做(公司每人都有一个花名),他是我的师傅,他用了一个下午的时间,搞定了我花了两周的任务,可见我是多么菜。这个版本上线后我看了他们的代码,咦,卧槽,很吊的样子,这是什么东西recyclerview???然后就开始了我的模仿之路。

一、RecyclerView初识

简介:RecyclerView是android5.0以后推出的view,同时谷歌也推出了对应的向下的兼容库,供我们在5.0以下的设备中使用它。

区别:ListView、GridView != RecylcerView

1.不关心Item是否显示在正确的位置,如何显示2.不关心item间的如何分割3.不关注Item增加与删除的动画效果。

4.仅仅关注如何回收和复用View

RecyclerView相关的重要类(这些类解决了上述不关心的问题)

1.Adapter2.ViewHolder

3.LayoutManager-设置显示的风格是ListView还是GridView或者是瀑布流

4.itemDecoration -设置item间的间隔

5.itemAnimator-设置删除的动画效果

RecyclerView功能体现

1.ListView和GridView2.横向ListView和横向Gridview3.瀑布流 ---LayoutManager控制

4.定制item增加与删除动画 ---ItemAnimator


二、RecyclerViewDemo1

1.添加依赖
在AndroidStudio的build.gradle中添加依赖
dependencies{
   compile 'com.android.support:recyclerview-v7:21.0.+'
}

2.编码

2.1  现在XML中添加好布局主要设置好ID
 
<?xml version="1.0" encoding="utf-8"?><android.support.v7.widget.RecyclerView     xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/bank_cards"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" />

2.2  在MainActivity中获取这个RecyclerView,并声明LayoutManage和Adapter

//获取RecyclerView
   mRecyclerView = (RecyclerView) findViewById(R.id.bank_cards);

//创建默认的线性LayoutManager
   mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

//创建并设置Adapter
       mRecyclerView.setAdapter(mAdapter = new HomeAdapter());

3.Adapter的创建
public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder>{        @Override        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {            MyViewHolder holder = new MyViewHolder(LayoutInflater.from(MainActivity.this).inflate(R.layout.item_list,parent,false));            return holder;        }        @Override        public void onBindViewHolder(MyViewHolder holder, int position) {            holder.tv.setText(mDatas.get(position));        }        @Override        public int getItemCount() {            return mDatas.size();        }        class MyViewHolder extends RecyclerView.ViewHolder        {            TextView tv;            public MyViewHolder(View view)            {                super(view);                tv = (TextView) view.findViewById(R.id.id_num);            }        }    }

4.添加数据源
   protected void initData(){        mDatas = new ArrayList<String>();        for (int i='A';i<'z';i++) {            mDatas.add(""+(char)i);        }    }

5.贴上完整代码
public class MainActivity extends AppCompatActivity {    private List<String> mDatas;    private HomeAdapter mAdapter;    private RecyclerView mRecyclerView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initData();        mRecyclerView = (RecyclerView) findViewById(R.id.bank_cards);        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));        mRecyclerView.setAdapter(mAdapter = new HomeAdapter());    }//这是一个实验    protected void initData(){        mDatas = new ArrayList<String>();        for (int i='A';i<'z';i++) {            mDatas.add(""+(char)i);        }    }    public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder>{        @Override        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {            MyViewHolder holder = new MyViewHolder(LayoutInflater.from(MainActivity.this).inflate(R.layout.item_list,parent,false));            return holder;        }        @Override        public void onBindViewHolder(MyViewHolder holder, int position) {            holder.tv.setText(mDatas.get(position));        }        @Override        public int getItemCount() {            return mDatas.size();        }        class MyViewHolder extends RecyclerView.ViewHolder        {            TextView tv;            public MyViewHolder(View view)            {                super(view);                tv = (TextView) view.findViewById(R.id.id_num);            }        }    }}

好了,Recycler的本阶段就已经结束了。本阶段主要是为了跑起来,还看不出和Li stView的效果。下边会陆续更新两部,To Be Continue...





1 0