您的位置:首页 > 其它

recycleview线性布局和网格布局的切换

2017-12-15 07:49 260 查看
第一步:在adapter中重写getItemViewType()方法;添加setType(int type)方法

[java]
view plain
copy

//点击切换布局的时候通过这个方法设置type  
public void setType(int type) {  
    this.type = type;  
}  
  
@Override  
//用来获取当前项Item是哪种类型的布局  
public int getItemViewType(int position) {  
    return type;  
}  

第二步:在点击布局切换图片时三步走

[java]
view plain
copy

if (goodsType==0){  
    ivGoodsType.setImageResource(R.mipmap.good_type_grid);  
    //1:设置布局类型  
    adapter.setType(1);  
    //2:设置对应的布局管理器  
    recyclerView.setLayoutManager(new GridLayoutManager(context,2));  
    //3:刷新adapter  
    adapter.notifyDataSetChanged();  
    goodsType=1;  
}else {  
    ivGoodsType.setImageResource(R.mipmap.good_type_linear);  
    adapter.setType(0);  
    recyclerView.setLayoutManager(new LinearLayoutManager(context));  
    adapter.notifyDataSetChanged();  
    goodsType=0;  
}  

第三步:在adapter的onCreateViewHolder()方法中根据自己设置的布局类型切换item布局

[java]
view plain
copy

public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {  
    View baseView;  
    if (viewType == 0) {  
        baseView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_listview_goods_list, parent, false);  
        LinearViewHolder linearViewHolder = new LinearViewHolder(baseView);  
        return linearViewHolder;  
    } else {  
        baseView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_gridview_goods_list, parent, false);  
        GridViewHolder gridViewHolder = new GridViewHolder(baseView);  
        return gridViewHolder;  
    }  
}  

简单的切换功能基本实现;接下来了解下滑动置顶位置出现置顶图片,点击图片实现RecyclerView置顶的功能;
置顶图片并非一直显示在屏幕上,而是通过监听滑动到一定距离才会显示;我们需要重写RecyclerView的滑动监听;

[java]
view plain
copy

//设置滑动监听  
        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {  
            @Override  
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {  
                super.onScrolled(recyclerView, dx, dy);  
                RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();  
                if (layoutManager instanceof LinearLayoutManager) {  
                    LinearLayoutManager linearManager = (LinearLayoutManager) layoutManager;  
                    //获取第一个可见位置  
                    int firstVisibleItemPosition = linearManager.findFirstVisibleItemPosition();  
                    //当滑动到第十个以上时显示置顶图标  
                    if (firstVisibleItemPosition>10) {  
                        ivStick.setVisibility(View.VISIBLE);  
                    }else {  
                        ivStick.setVisibility(View.GONE);  
                    }  
                }  
            }  
        }); 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: