先看一下 运行效果
该篇文章 是基于上一篇 RecylerView之list显示 的基础上添加的 如想详细了解 请看上一篇
先看一下 MainActivity 中的代码
private void loadGridData(boolean invresion, boolean orinetion ) {
ArrayList<DataBean> datas = new ArrayList<>();
//给bean类放数据,最好把装好数据的bean类放到集合里
for(int i=0;i<35;i++){
DataBean dataBean=new DataBean();
dataBean.icon=R.drawable.ren;
dataBean.name="picture"+i;
//bean类放入集合里
datas.add(dataBean);
}
RecylerGridAdapter gridAdapter = new RecylerGridAdapter(datas,this);
recyclerView.setAdapter(gridAdapter);
//布局管理器,参数:上下文 规定显示几列
GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);
gridLayoutManager.setReverseLayout(invresion);
gridLayoutManager.setOrientation(orinetion ? LinearLayoutManager.VERTICAL : LinearLayoutManager.HORIZONTAL);
recyclerView.setLayoutManager(gridLayoutManager);
}
在 onOptionsItemSelected()方法里添加:
if (itemId == R.id.action_grid){ //标准显示 loadGridData(false,true); Toast.makeText(MainActivity.this,"你好",Toast.LENGTH_SHORT).show(); return true; }//list垂直反向显示 else if (itemId == R.id.action_grid_vertical){ loadGridData(true,true); }//水平显示 else if(itemId == R.id.action_grid_horiztal){ loadGridData(false,false); }//水平反向显示 else if(itemId == R.id.action_grid_horiztalwest){ loadGridData(true,false); }
其对应的自定义适配器:
public class RecylerGridAdapter extends RecyclerView.Adapter<RecylerGridAdapter.GridHolder> { private List<DataBean> dataBeen; private Context context; public RecylerGridAdapter(List<DataBean> dataBeen, Context context) { this.dataBeen = dataBeen; this.context = context; } @Override public GridHolder onCreateViewHolder(ViewGroup parent, int viewType) { //转换一个view布局对象,决定了item的样子 参数:1 上下文 2 xml布局文件 View itemview = View.inflate(context, R.layout.item_grid, null); //创建一个viewHolder对象 GridHolder gridHolder = new GridHolder(itemview); // ListViewHolder listViewHolder = new ListViewHolder(itemview); //把viewHolder对象传递出去 return gridHolder; } @Override public void onBindViewHolder(GridHolder holder, int position) { DataBean dataBean = dataBeen.get(position); holder.setData(dataBean); } @Override public int getItemCount() { if(dataBeen !=null && dataBeen.size()>0){ return dataBeen.size(); } return 0; } public class GridHolder extends RecyclerView.ViewHolder { private final ImageView imgView; private final TextView textView; public GridHolder(View itemView) { super(itemView); imgView =(ImageView) itemView.findViewById(R.id.item_iv_icon); textView = (TextView)itemView.findViewById(R.id.list_tv_name); } public void setData(DataBean data) { imgView.setImageResource(data.icon); textView.setText(data.name); } } }
其对应的xml文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:gravity="center" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:src="@drawable/pic7" android:id="@+id/item_iv_icon" android:layout_width="75dp" android:layout_height="75dp" /> <TextView android:text="图片描述" android:textSize="20sp" android:textStyle="bold" android:id="@+id/list_tv_name" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>