RecylerView基本使用

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);
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值