RecyclerView官方文档翻译

时间:2022-09-06 05:39:55

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

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

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

如果要使用RecyclerView组件,必须指定一个Adapter和一个LayoutManager。通过集成RecyclerView.Adapter的方式可以自定义一个Adapter。实现Adapter的详情将取决于数据集的具体信息以及视图的类型。
LayoutManager LayoutManager决定RecyclerView内各项视图的位置并决定何时重新使用用户已不可见的项目视图。 如果要重新使用(或者重复使用)一个视图,LayoutManager可能会要求Adapter以数据集中的另一个元素替换视图的内容。以此方式重复使用视图将可避免创建不必要的视图或执行非常耗的RecyclerView官方文档翻译
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.+'
}