RecyclerView基本使用(二)

2018-07-08  本文已影响0人  aidlFor

现在基于第一个例子,总结常用的效果,GridView效果,瀑布流效果并且实现点击和分割线。
1,GridView效果
只要在原基础上修改LayoutManager配置即可,从LinearLayoutManager换成StaggeredGridLayoutManager实现GridView效果,代码如下:

StaggeredGridLayoutManager staggeredGridLayoutManager = new 
StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL);
mRecyclerView.addItemDecoration(new DividerGridItemDecoration(this));
mRecyclerView.setLayoutManager(staggeredGridLayoutManager);

点击事件:
1)在Adapter中定义监听回调接口和方法

  public interface OnItemClickListener{

    void onItemClick(View view,int position);

    void onItemLongClick(View view,int position);

}

public void setOnItemClickListener(OnItemClickListener mOnItemClickListener){
    this.mOnItemClickListener =mOnItemClickListener;
}

2)在当前的Adapter中onBindViewHolder回调中调用布局的监听事件

 @Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {

    if (mOnItemClickListener!=null){
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = holder.getLayoutPosition();
                mOnItemClickListener.onItemClick(holder.title,position);
            }
        });

        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                int position = holder.getLayoutPosition();
                mOnItemClickListener.onItemLongClick(holder.title,position);

                return false;
            }
        });

    }
}

3)在Activity中调用这个监听

mAdapter.setOnItemClickListener(new RecycleViewAdapter.OnItemClickListener() {
        @Override
        public void onItemClick(View view, int position) {
            Toast.makeText(RecycleViewActivity.this,"点击了"+position,Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onItemLongClick(View view, int position) {
            mAdapter.removeData(position);
        }
    });
gridview.png

2,瀑布流效果
需要在Adapter中写一个随机的高度来控制每一个item就好,通常这个高度是服务器返回的。

 1)在Adapter构造器中初始化随机的瀑布流高度
    mHeights = new ArrayList<Integer>();

    for (int i =0; i< mList.size();i++){
        mHeights.add((int) (100+Math.random() *300));
    }
 2)在onBindViewHolder中重新设置子View的大小
@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {

    ViewGroup.LayoutParams layoutParams = holder.title.getLayoutParams();

    layoutParams.height = mHeights.get(position);

    holder.title.setLayoutParams(layoutParams);

    holder.title.setText(mList.get(position));

    

    }
}
pbl.png
上一篇下一篇

猜你喜欢

热点阅读