Android RecyclerView使用详解(一)

一、前言

RecyclerView是谷歌V7包下新增的控件,用来替代ListView的使用,RecyclerView标准化了ViewHolder类似于ListViewconvertView用来做视图缓.

先来说说RecyclerView的有点就是,他可以通过设置LayoutManager来快速实现listviewgridview、瀑布流的效果,而且还可以设置横向和纵向显示,添加动画效果也非常简单(自带了ItemAnimation,可以设置加载和移除时的动画,方便做出各种动态浏览的效果),也是官方推荐使用的.以下是官方的说明:

RecyclerView is a more advanced andflexible version of ListView. This widget is a container for large sets ofviews that can be recycled and scrolled very efficiently. Use the RecyclerViewwidget when you have lists with elements that change dynamically. 简单说就是当你需要动态展示一组数据的时候就会需要用到它。

讲了这么多虚的,接下来我们看看在代码中怎么来实现.

二、实现

首先要用这个控件,你需要在gradle文件中添加包的引用(配合官方CardView使用)

compile 'com.android.support:cardview-v7:21.0.3'

compile 'com.android.support:recyclerview-v7:21.0.3'

然后是在XML文件用使用它

<android.support.v7.widget.RecyclerView

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:id="@+id/recycler_view"

    android:layout_centerVertical="true"

    android:layout_centerHorizontal="true"/>

接着在Activity中设置它

publicclassMainActivity extendsActionBarActivity {

    @InjectView(R.id.recycler_view)

    RecyclerView mRecyclerView;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        ButterKnife.inject(this);

 

        mRecyclerView.setLayoutManager(newLinearLayoutManager(this));//这里用线性显示类似于listview

//        mRecyclerView.setLayoutManager(newGridLayoutManager(this,2));//这里用线性宫格显示类似于grid view

//        mRecyclerView.setLayoutManager(newStaggeredGridLayoutManager(2,OrientationHelper.VERTICAL));//这里用线性宫格显示类似于瀑布流

        mRecyclerView.setAdapter(newNormalRecyclerViewAdapter(this));

    }

 

    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.menu_main,menu);

        returntrue;

    }

 

    @Override

    public boolean onOptionsItemSelected(MenuItem item) {

        int id= item.getItemId();

 

        if (id== R.id.action_settings) {

            returntrue;

        }

 

        returnsuper.onOptionsItemSelected(item);

    }

}

然后是适配器代码

publicclassNormalRecyclerViewAdapter extendsRecyclerView.Adapter<NormalRecyclerViewAdapter.NormalTextViewHolder> {

    private finalLayoutInflater mLayoutInflater;

    private finalContext mContext;

    privateString[] mTitles;

 

    publicNormalRecyclerViewAdapter(Context context) {

        mTitles = context.getResources().getStringArray(R.array.titles);

        mContext = context;

        mLayoutInflater =LayoutInflater.from(context);

    }

 

    @Override

    publicNormalTextViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        returnnewNormalTextViewHolder(mLayoutInflater.inflate(R.layout.item_text, parent, false));

    }

 

    @Override

    public void onBindViewHolder(NormalTextViewHolder holder, int position) {

        holder.mTextView.setText(mTitles[position]);

    }

 

    @Override

    public int getItemCount() {

        return mTitles== null ?0 : mTitles.length;

    }

 

    public staticclassNormalTextViewHolder extendsRecyclerView.ViewHolder {

        @InjectView(R.id.text_view)

        TextView mTextView;

 

        NormalTextViewHolder(View view) {

            super(view);

            ButterKnife.inject(this, view);

            view.setOnClickListener(newView.OnClickListener(){

                @Override

                public void onClick(View v) {

                    Log.d("NormalTextViewHolder","onClick--> position = "+ getPosition());

                }

            });

        }

    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值