public class Fragment1 extends Fragment { private Context context; private TextView startTime; private TextView endTime; private RecyclerView rcy; private ArrayList<String> mItem;//数据集合 private LayoutInflater mInflater; public Fragment1(Context context) { this.context = context; mInflater = LayoutInflater.from(context); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_layout, container, false); startTime = (TextView) v.findViewById(R.id.starttime); endTime = (TextView) v.findViewById(R.id.endtime); rcy = (RecyclerView) v.findViewById(R.id.recycleview); initTime(); Toast.makeText(context, "Fragment1", Toast.LENGTH_SHORT).show(); return v; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initData(); initView(); } private void initView() { rcy.setAdapter(new MyAdapter()); rcy.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));//listview // rcy.setLayoutManager(new GridLayoutManager(context, 3));//GridView 参数2为列数 // rcy.setLayoutManager(new StaggeredGridLayoutManager(10, StaggeredGridLayoutManager.HORIZONTAL));//水平GridView 参数1为列数(行数) // rcy.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL_LIST));//设置条目分割线 rcy.setItemAnimator(new DefaultItemAnimator()); }private void initData() { mItem = new ArrayList(); for (int i = 0; i < 20; i++) { mItem.add("数据:" + i); } } private void initTime() { startTime.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { TimeUtils.showdatrdialog(context, startTime); } }); endTime.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { TimeUtils.showdatrdialog(context, endTime); } }); } /* * 1. 创建一个类 MyAdapter extends RecyclerView.Adapter<ViewHolder> * 2. 创建一个类 MyViewHolder extends RecyclerView.ViewHolder * 3. 将 MyAdapter泛型改为 MyViewHolder * 4. 给 MyAdapter添加未实现的方法 * 5. 在 onCreateViewHolder 中创建 ViewHolder * MyViewHolder myViewHolder = new MyViewHolder(itemView); * itemView:构造方法默认需要一个 View itemView 条目,为了找id,设置数据。 * 6. 在 MyViewHolder 构造方法中通过 new MyViewHolder(itemView);时传进来的 itemView 找条目id. * 7. 在 onBindViewHolder 为条目中的控件 赋值 * 8. 设置布局样式 recyclerView.setLayoutManager(new LinearLayoutManager(context,LinearLayoutManager.VERTICAL,false)); * 9. 设置条目分割线 * a. recyclerView.addItemDecoration(new DividerItemDecoration(context,DividerItemDecoration.VERTICAL_LIST)); * DividerItemDecoration 是gitHub上写好的开源类。 * b. 直接给item布局设置背景图片,一样可以达到效果 * c. 在 item 布局文件的根节点,设置margin值:android:layout_margin="3dp" * 10.定制分割线样式 * DividerItemDecoration类中源码 :context.obtainStyledAttributes(ATTRS); * 意为:从Theme中所设置的属性中 查找 listDivider :int[] ATTRS = new int[]{android.R.attr.listDivider}; * listDivider:是系统设定的属性,DividerItemDecoration 巧妙的利用了该属性,我们自定义样式,可以自定义该属性的指向 * 步骤:a.在drawable目录下新建 shape 的xml文件 定义矩形 高度 颜色等属性 * * <?xml version="1.0" encoding="utf-8"?> * <shape xmlns:android="http://schemas.android.com/apk/res/android" * android:shape="rectangle"> * <size android:height="4dp" /> * <gradient * android:centerColor="#0f0" * android:endColor="#00f" * android:startColor="#f00" * android:type="linear" /> * </shape> * * b。在stytles的主题中添加item 值为 该shape(注意要在每个不同版本的Styles下都添加) * * <item name="android:listDivider">@drawable/divider_shape</item> 让listDivider指向我们所画的shape * 11.一行代码,切换显示样式 * a. listview rcy.setLayoutManager(new LinearLayoutManager(context)); * b. GridView rcy.setLayoutManager(new GridLayoutManager(context, 3));// 参数2为列数 * c. 高级GridView rcy.setLayoutManager(new StaggeredGridLayoutManager(5, StaggeredGridLayoutManager.HORIZONTAL)); * 水平GridView 参数1为列数(行数) * (水平GridView每个item显示会出问题,因为是水平滑动的,所以对每个item宽度是没有限制的, * 宽度变为wrap_content,可以写固定宽度解决。只有水平GridView需要这样做) * * 12.瀑布流效果 实际为高级GridView的垂直效果,在onBindViewHolder方法中用代码设置 itemView的宽高 * rcy.setLayoutManager(new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL)); * * ViewGroup.LayoutParams params = holder.itemView.getLayoutParams(); * params.height = (int) (100+Math.random()*300);// 设置每个item的高为 100~400 随机数 * holder.itemView.setLayoutParams(params); * * 13.给Item增加 添加,删除条目的动画 * a. rcy.setItemAnimator(new DefaultItemAnimator()); * b. 在条目变化时调用 notifyItemInserted(position);notifyItemRemoved(position); * * 在MyAdapter中添加增加和删除方法 * position:所增加删除条目的索引位置 * * public void addData(int position, String data) { * * mItem.add(data); * notifyItemInserted(position); * } * * public void deleteData(int position) { * * mItem.remove(position); * notifyItemRemoved(position); * } * c.在增加和删除条目时调用这两个方法 * mAdapter.addData(1,"新增加的条目"); * mAdapter.deleteData(1); * d.系统只提供了一种DefaultItemAnimator动画效果 可以自定义 也可以github其他动画 * 14.条目点击事件&条目状态选择器 */ class MyAdapter extends RecyclerView.Adapter<MyViewHolder> { // 创建ViewHolder @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = mInflater.inflate(R.layout.item_order_manage, parent, false); MyViewHolder myViewHolder = new MyViewHolder(itemView); return myViewHolder; } // 绑定ViewHolder @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.orderId.setText(mItem.get(position)); } @Override public int getItemCount() { return mItem.size(); } public void addData(int position, String data) { mItem.add(data); notifyItemInserted(position); } public void deleteData(int position) { mItem.remove(position); notifyItemRemoved(position); } } class MyViewHolder extends RecyclerView.ViewHolder { private TextView orderId; private TextView name; private TextView address; private TextView money; private TextView state; private TextView action; // 构造方法默认需要一个 View itemView 条目 public MyViewHolder(View itemView) { super(itemView); orderId = (TextView) itemView.findViewById(R.id.orderId); name = (TextView) itemView.findViewById(R.id.name); address = (TextView) itemView.findViewById(R.id.address); money = (TextView) itemView.findViewById(R.id.money); state = (TextView) itemView.findViewById(R.id.state); action = (TextView) itemView.findViewById(R.id.action); } } }
RecylerView基本使用
最新推荐文章于 2024-06-05 19:22:33 发布