recyclerview代替listview和grideview

Posted 菜鸟_阿亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了recyclerview代替listview和grideview相关的知识,希望对你有一定的参考价值。

1.RecyclerView 是Google推出的最新的 替代ListView、GridView的组件,RecyclerView是用来显示大量数据的容器,并通过有限数量的子View,来提高滚动时的性能。

2.优点:RecyclerView 不再负责布局,而是专注于布局复用。

自己在用的过程中,感觉适配器清晰明了,一个填充布局,填充完布局然后到viewholder找到控件,onBindViewHolder里就是给控件设置内容。

3.3种:
      LinearLayoutManager 线性布局管理器      (ListView效果)
      GridLayoutManager    网格布局管理器    (GridView效果)
      StaggeredGridLayoutManager  瀑布流管理器
4.布局:使用v7包下

<android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical" />

5.适配器:自己使用的自布局是系统的一个简单布局R.layout.simple_list_item_1,就一个textview,简单用数组来实现。

public class ReAdapter extends RecyclerView.Adapter<ReAdapter.ViewHolder> {
    // 数据集
    private String[] mDataset;

    public ReAdapter(String[] dataset) {
        super();
        mDataset = dataset;
    }

    @Override
    public int getItemCount() {
        return mDataset.length;
    }

    @Override
    public void onBindViewHolder(ViewHolder arg0, int arg1) {
        // 绑定数据到ViewHolder上
        arg0.mTextView.setText(mDataset[arg1]);

    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) {
        // 创建一个View,简单起见直接使用系统提供的布局,就是一个TextView
        View view = View.inflate(arg0.getContext(),
                android.R.layout.simple_list_item_1, null);
        // 创建一个ViewHolder
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView mTextView;

        public ViewHolder(View itemView) {
            super(itemView);
            mTextView = (TextView) itemView;
        }
    }

}

6.activity中,第一个是实现gridview,listview的话只需要将GridLayoutManager  layoutManager = new GridLayoutManager(this,3);改成 LinearLayoutManager layoutManager = new LinearLayoutManager(this);就可以实现了。当然这种情况只是自布局都是一个textview,要加载别的还需要修改布局,适配器。

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        GridLayoutManager  layoutManager = new GridLayoutManager(this,3);
        recyclerView.setLayoutManager(layoutManager);
        // 创建数据集
        String[] dataset = new String[100];
        for (int i = 0; i < dataset.length; i++){
            dataset[i] = "item" + i;
        }
        // 创建Adapter,并指定数据集
        ReAdapter adapter = new ReAdapter(dataset);
        // 设置Adapter
        recyclerView.setAdapter(adapter);

    }

7.这样来 是不是感觉比原来的简单好多,而且可以重复利用资源。

以上是关于recyclerview代替listview和grideview的主要内容,如果未能解决你的问题,请参考以下文章

Android Material Design学习之RecyclerView代替 ListView

ListView与RecyclerView对比浅析——缓存机制

如何在 Android Studio 中将 ListView 更改为 RecyclerView?

RecyclerView的使用之HelloWorld

NestedScrollView,RecyclerView

RecyclerView面试必问