android之recyclerview的基本使用

Posted

tags:

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

Google在推出android5.0的时候推出了Material Design ,RecyclerViewMaterial Design 重要组件之一。当然还有CardView/Palette.

RecyclerView是用来替换传统的ListViewGridView,瀑布流效果的。是的RecyclerView这一个控件,可以实现这三个效果。虽然在开始使用recyclerview的时候会感到有些男,但是用熟练了会发现recyclerview十分强大。它可以给每一item里面的控件设置点击时间,而不需要担心事件冲突的问题,如果是使用listview或者是gridview就必须要解决事件冲突,甚至listviewgridviewitem只能设置一个点击事件,否则就会造成事件冲突,而这些冲突并不好解决。所以recyclerview来了。

首先在项目中集成RecyclerView,在build.gradle添加RecyclerView的依赖

compile ‘com.android.support:recyclerview-v7:23.2.1‘
这样项目中就集成 recyclerview了,Android Studio 会自动联网下载 recyclerview包。

activity_main.xml中,使用recyclerview.

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

布局中已经有了recyclerview的控件,下面就开始在代码中编写。

    在这里解释一下recyclerview的使用。就像listview那样,recyclerview也需要一个适配器;在我们优化listview的时候,我们经常会使用到一个内部类ViewHolder来保存item中的控件,以便于item的复用。而现在recyclerview则必须使用ViewHolder。这个ViewHolder必须继承RecyclerView.ViewHolder,RecyclerView.ViewHolder有一个参数的构造方法,传入的是一个view,这个view 就是recyclerview的item。

RecyclerViewHolder:

public class RecyclerViewHolder extends RecyclerView.ViewHolder {
    public TextView textView;
    public ImageView imageView;
    public RecyclerViewHolder(View itemView) {
        super(itemView);
        textView = (TextView) itemView.findViewById(R.id.textView);
        imageView = (ImageView) itemView.findViewById(R.id.imageView);
    }
}

RecyclerViewHolder写好之后就开始写Adapter.同样RecyclerAdapter需要继承RecyclerView.Adapter<RecyclerViewHolder>,泛型ViewHolder就是自己自定义的RecyclerViewHolder。Adapter的写法如下:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerViewHolder> {
    private List<Map<String, String>> dataList;

    public RecyclerAdapter() {
        dataList = new ArrayList<>();
    }

    public void addAll(List<Map<String, String>> data){
        dataList.addAll(data);
    }

    /**
     *
     * @param viewType 对应的是getItemViewType(int position)方法返回的数值
     */
    @Override
    public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
        return new RecyclerViewHolder(view);
    }

    /**
     *
     * @param holder 对应的是onCreateViewHolder方法,返回的RecyclerViewHolder
     * @param position 当前的item的位置
     */
    @Override
    public void onBindViewHolder(RecyclerViewHolder holder, int position) {
        holder.textView.setText(dataList.get(position).get("data"));
    }

    @Override
    public int getItemCount() {
        return dataList.size();
    }
}

MainActivity中的代码。

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    //使用线性布局管理器,设置的方向orientation是默认,即垂直方向
    private LinearLayoutManager manager;
    //适配器
    private RecyclerAdapter adapter;
    //数据源
    private List<Map<String, String>> list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        manager = new LinearLayoutManager(this);
        adapter = new RecyclerAdapter();
        //设置布局管理器
        recyclerView.setLayoutManager(manager);
        //给recyclerview设置适配器
        recyclerView.setAdapter(adapter);
        list = new ArrayList<>();
        for (int i=0;i<50;i++)
        {
            Map<String,String> map = new HashMap<>();
            map.put("data", "item-->   "+i);
            list.add(map);
        }
        adapter.addAll(list);
        adapter.notifyDataSetChanged();
    }
}

recyclerview实现listview的效果就完成了,运行效果:

技术分享

如果是想每个item横向滑动的话,只需要使用LinearLayoutManager的三个参数的构造方法就行了,new LInearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true)就可以实现横向滑动的效果了。

    recyclerView实现GridView的效果。需要是用是GridLayoutManager。将recyclerView的布局管理器更换成GridLayoutManager manager = new GridLayoutManager(this, 2),效果图如下:

技术分享

recyclerview实现瀑布流的效果另起一片文章讲解。

本文出自 “墨宇迟伤” 博客,请务必保留此出处http://zzhhz.blog.51cto.com/7107920/1753676

以上是关于android之recyclerview的基本使用的主要内容,如果未能解决你的问题,请参考以下文章

Android之RecyclerView

Android RecyclerView的基本使用

Android Studio(Kotlin)之RecyclerView

Android之RecyclerView简单使用

Android之RecyclerView介绍

Android Material Design系列之RecyclerView和CardView