RecyclerView官方文档翻译

RecyclerView比ListView更高级且更具灵活性。此组件是一个用于显示庞大数据集的容器,可通过保持有限数量的视图进行非常有效的滚动操作。如果您有数据集合,其中的元素将因用户操作或者网络事件而发生改变,建议使用RecyclerView。

RecyclerView通过提供下列功能来简化庞大数据集的显示与处理:

  • 用于项目定位的布局管理器
  • 用于通用项目操作(例如删除或添加Item)的默认动画
您也可以灵活选择如何为RecyclerView组件定制管理器与动画,如下图所示:


如果要使用RecyclerView组件,必须指定一个Adapter和一个LayoutManager。通过集成RecyclerView.Adapter的方式可以自定义一个Adapter。实现Adapter的详情将取决于数据集的具体信息以及视图的类型。

LayoutManager
LayoutManager决定RecyclerView内各项视图的位置并决定何时重新使用用户已不可见的项目视图。
如果要重新使用(或者重复使用)一个视图,LayoutManager可能会要求Adapter以数据集中的另一个元素替换视图的内容。以此方式重复使用视图将可避免创建不必要的视图或执行非常耗的
findViewById,从而改善性能。
RecyclerView提供提供了一下内置布局管理器:
  • LinearLayoutManager 以垂直或者水平滚动列表方式显示Item,如右图:

  • GridLayoutManager 以网格方式显示Item

  • StaggeredGridLayoutManager 在分散对齐网格中显示Item
注意:如果要自定义一个LayoutManager,需要继承并实现RecyclerView.LayoutManager

Animation
RecyclerView默认情况下,当增加或者删除Item时,带有动画效果。如果要定制某些其他效果的动画,需要扩展RecyclerView.ItemAnimator类,并使用RecyclerView.setItemAnimator设置所定制的动画。

以下是RecyclerView使用的代码示例:
下列代码展示如何将RecyclerView添加至布局:
<!-- RecyclerView的通用属性 -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_recycler_view"
    android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
将RecyclerView添加至布局之后,可以在Java代码中获取起引用,并与LayoutManager相关联,同时设置一个Adapter用来显示数据,如下所示:
public class MyActivity extends Activity {
    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity);
        mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

        // use this setting to improve performance if you know that changes
        // in content do not change the layout size of the RecyclerView
        mRecyclerView.setHasFixedSize(true);

        // use a linear layout manager
        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);

        // specify an adapter (see also next example)
        mAdapter = new MyAdapter(myDataset);
        mRecyclerView.setAdapter(mAdapter);
    }
    ...
}

Adapter
适配器的功能是为数据源中的每一个Item创建一个视图,并且当之前的Item不可见时,以新的Item进行替换。下列代码示例将展示一个简单的实现,目标为包含一个TextView显示字符串列表的组件:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private String[] mDataset;

    // Provide a reference to the views for each data item
    // Complex data items may need more than one view per item, and
    // you provide access to all the views for a data item in a view holder
    public static class ViewHolder extends RecyclerView.ViewHolder {
        // each data item is just a string in this case
        public TextView mTextView;
        public ViewHolder(TextView v) {
            super(v);
            mTextView = v;
        }
    }

    // Provide a suitable constructor (depends on the kind of dataset)
    public MyAdapter(String[] myDataset) {
        mDataset = myDataset;
    }

    // Create new views (invoked by the layout manager)
    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {
        // create a new view
        View v = LayoutInflater.from(parent.getContext())
                               .inflate(R.layout.my_text_view, parent, false);
        // set the view's size, margins, paddings and layout parameters
        ...
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        // - get element from your dataset at this position
        // - replace the contents of the view with that element
        holder.mTextView.setText(mDataset[position]);

    }

    // Return the size of your dataset (invoked by the layout manager)
    @Override
    public int getItemCount() {
        return mDataset.length;
    }
}

最后不要忘记需要添加依赖:
dependencies {
    ...
    compile 'com.android.support:recyclerview-v7:21.0.+'
}




评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值