设为首页 加入收藏

TOP

android RecyclerView(一)
2019-08-31 00:06:16 】 浏览:117
Tags:android RecyclerView

引用

在项目的build.gradle添加依赖

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

RecyclierView使用的基本方法

recyclerView.setAdapter(); 添加适配器(必须)

recyclerView.setLayoutManager(); 选择一种布局(必须)

recyclerAdapter.setHeaderView(); 添加头布局

recyclerAdapter.setFooterView(); 添加底部布局

recyclerView.setItemAnimator(new DefaultItemAnimator()); 添加默认动画

recyclerView.addItemDecoration(); 添加分割线

Layout Manager布局管理器

1.三种布局管理器:

new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) 以垂直或者水平列表方式展示Item,第三个参数是否颠倒数据显示

new GridLayoutManager(this,4)  以网格方式展示Item,第二个参数代表列数

new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.HORIZONTAL)  以瀑布流方式展示Item,第一个参数代表列数

2.常用方法

canScrollHorizontally();//能否横向滚动
canScrollVertically();//能否纵向滚动
scrollToPosition(int position);//滚动到指定位置
setOrientation(int orientation);//设置滚动的方向
getOrientation();//获取滚动方向
findViewByPosition(int position);//获取指定位置的Item View
findFirstCompletelyVisibleItemPosition();//获取第一个完全可见的Item位置
findFirstVisibleItemPosition();//获取第一个可见Item的位置
findLastCompletelyVisibleItemPosition();//获取最后一个完全可见的Item位置
findLastVisibleItemPosition();//获取最后一个可见Item的位置

 Adapter适配器模板

RecyclerView必须自定义适配器,并且自己创建事件监听,布局和数据的绑定顺序,每个Item都会执行一遍:getIItemViewType(绑定类型) > onCreateViewHolder(选择布局类型) > onBindViewHolder(绑定数据)

notifyItemInserted(position);插入一个item

notifyItemRemoved(position); 移除一个item

notifyItemChanged(position) 刷新item

public class DataRecyclerAdapter extends RecyclerView.Adapter<DataRecyclerAdapter.MyViewHolder>{
    private List<String> list;
    private Context context;
    private List<Integer> mHeights;
    private static int TYPE_TITLE=0;
    private static int TYPE_FOOTER=1;
    private static int TYPE_CONTENT =2;
    private View mHeaderView;
    private View mFooterView;

    public DataRecyclerAdapter(Context context, List<String> list) {
        this.list=list;
        mHeights = new ArrayList<>();
        this.context=context;
    }

    //根据不同的类型适应不用的布局
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if(mHeaderView != null && viewType == TYPE_TITLE) {
            return new MyViewHolder(mHeaderView);
        }
        if(mFooterView != null && viewType == TYPE_FOOTER) {
            return new MyViewHolder(mFooterView);
        }
        return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.options_item3,parent,false));
    }

    //给item分布不同的类型
    @Override
    public int getItemViewType(int position) {
        if (position == 0){
            return TYPE_TITLE;
         }else if(position==list.size()){
            return TYPE_FOOTER;
        }else{
            return TYPE_CONTENT;
        }
    }

    public View getHeaderView() {
        return mHeaderView;
    }
    //添加自定义的头部
    public void setHeaderView(View headerView) {
        mHeaderView = headerView;
        notifyItemInserted(0);
    }

    public View getFooterView() {
        return mFooterView;
    }
    //添加自定义底部
    public void setFooterView(View footerView) {
        mFooterView = footerView;
        notifyItemInserted(list.size()+1);
    }
    //主体布局
    @Override
    public void onBindViewHolder(final MyViewHolder holder, int position) {
        if(getItemViewType(position) != TYPE_CONTENT) {
            return;
        }
            holder.textView.setText(list.get(position-1));

        if (mOnItemClickLitener != null){
            holder.it
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇让你的app体验更丝滑的11种方法!.. 下一篇Android项目实战(四十九):Ando..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目