RecyclerView的几种布局方式

来源:互联网 发布:设计队徽用什么软件 编辑:程序博客网 时间:2024/06/06 06:56

RecyclerView是一个非常实用的控件。可以实现listview,GridView所能实现的功能的显示。

这里来说说几种方式的实现:

//得到控件

recy_view = (RecyclerView) findViewById(R.id.recy_view);


//必须要有,默认的(listview的形式)
// recy_view.setLayoutManager(new LinearLayoutManager(this));

//横向(排成一排,不管有多少个,后面有个false和true)
// recy_view.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false));

//九宫格布局(垂直方向上的,4代表个数)
// recy_view.setLayoutManager(new GridLayoutManager(this,4));

//九宫格布局(水平方向上的)
recy_view.setLayoutManager(new GridLayoutManager(this, 4, LinearLayoutManager.HORIZONTAL, false));


下面是一个表示的adapter的写法:

/**
* Author:zzq (Create on 16/6/28)
* Email:272804553@qq.com
*/
public class MyAdapter extends RecyclerView.Adapter implements View.OnClickListener {

private ArrayList<Map<String, Object>> list = new ArrayList<>();
private int[] img_url =null;
public MyAdapter(ArrayList<Map<String, Object>> lists) {
this.list=lists;
img_url=new int[this.list.size()];
for (int i = 0; i < this.list.size(); i++) {
img_url[i]=R.drawable.timo;
}
}

//用于点击事件
private OnRecyclerViewItemClickListener mOnItemClickListener = null;

public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) {
this.mOnItemClickListener = listener;
}
//define interface
public static interface OnRecyclerViewItemClickListener {
void onItemClick(View view , int position);
}



@Override
public void onClick(View view) {
if(mOnItemClickListener!=null){
mOnItemClickListener.onItemClick(view, (Integer) view.getTag());
}
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view=LayoutInflater.from(parent.getContext()).inflate(R.layout.recycle_item,null);
ViewHolder vh = new ViewHolder(view);
//一个item设置一个点击事件
view.setOnClickListener(this);
return vh;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
ViewHolder viewHolder = (ViewHolder) holder;
viewHolder.getIv().setImageResource(img_url[position]);
viewHolder.getTv().setText(list.get(position).get("tv_text")+"");
viewHolder.getView().setTag(position);
viewHolder.getView().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(view.getContext(),"点击的整个"+position,Toast.LENGTH_LONG).show();
}
});
viewHolder.getIv().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(view.getContext(),"点击了"+position,Toast.LENGTH_LONG).show();
}
});
}

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



//Holder
class ViewHolder extends RecyclerView.ViewHolder{
private View view;
private TextView tv;
private ImageView iv;


public ViewHolder(final View itemView) {
super(itemView);
this.view=itemView;
//传入的View就是item布局,所有可以找到里面的布局
tv = (TextView) itemView.findViewById(R.id.tv);
iv = (ImageView) itemView.findViewById(R.id.iv);

}

public TextView getTv() {
return tv;
}

public ImageView getIv() {
return iv;
}

public View getView() {
return view;
}
}
}

现在可以随心所欲的实现布局了。


//-------end-------

0 0