美文网首页
recycleview 总结

recycleview 总结

作者: y2015 | 来源:发表于2019-05-07 15:06 被阅读0次

一 、 初始化recycleview

      //赋值
        listView = findViewById(R.id.list_view);
        //设置布局
        listView.setLayoutManager(new LinearLayoutManager(this));

        ArrayList list = new ArrayList<HashMap<String, String>>();
        for (int i = 0; i < 30; i++) {
            HashMap<String, String> model = new HashMap();
            model.put("name", "" + i);
            model.put("desc", "" + (30 - i));
            list.add(model);
        }

        recycleViewAdapter = new RecycleViewAdapter(list);
        //设置adapter
        listView.setAdapter(recycleViewAdapter);

         //点击监听
        recycleViewAdapter.setOnItemClickListener(new RecycleViewAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int postion) {
                Toast.makeText(MainActivity.this, "" + postion, Toast.LENGTH_SHORT).show();
            }
        });  

二、自定义adapter类

  public class RecycleViewAdapter extends RecyclerView.Adapter <RecyclerView.ViewHolder> {
    static final  int Type_First_item = 11111;
    static final  int Type_Second_item = 22222;

//监听接口
    private OnItemClickListener onItemClickListener;
    //数据源
    private List<HashMap<String, String>> list;

    public RecycleViewAdapter(List<HashMap<String, String>> list){
        this.list = list;
    }

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

  //定义监听接口
    public interface OnItemClickListener {
        public void onItemClick(View view, int postion);
    }

    public void setList(List<HashMap<String, String>> list) {
        this.list = list;
    }

      / /第一个item类型的viewholder
    class  FirstViewHolder extends RecyclerView.ViewHolder{

        TextView nameView;
        TextView descView;

        public FirstViewHolder(@NonNull View itemView) {
            super(itemView);
            nameView = itemView.findViewById(R.id.name);
            descView = itemView.findViewById(R.id.desc);
        }
    }

      / /第二个item类型的viewholder
    class  SecondViewHolder extends RecyclerView.ViewHolder{
        TextView nameView;
        TextView descView;

        public SecondViewHolder(@NonNull View itemView) {
            super(itemView);
            nameView = itemView.findViewById(R.id.name);
            descView = itemView.findViewById(R.id.desc);
        }
    }


//将xml反射为view  再和viewholder绑定 
    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        RecyclerView.ViewHolder holder;
        View itemView;
        if (i == Type_First_item){
            itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recycle_item, viewGroup, false);
            holder = new FirstViewHolder(itemView);
        }else {
            itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recycle_item2, viewGroup, false);
            holder = new SecondViewHolder(itemView);
        }
        return holder;
    }


//设置item数据
    @RequiresApi(api = Build.VERSION_CODES.N)
    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
        HashMap map = list.get(i);
        String name =  (String) map.getOrDefault("name", "");
        String desc =  (String) map.getOrDefault("desc", "");
        if (viewHolder instanceof FirstViewHolder){
            FirstViewHolder holder = (FirstViewHolder)viewHolder;
            holder.nameView.setText(name);
            holder.descView.setText(desc);


            if (onItemClickListener != null){
                holder.nameView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        onItemClickListener.onItemClick(view, i);
                    }
                });
            }

        }else {
            SecondViewHolder holder = (SecondViewHolder)viewHolder;
            holder.nameView.setText(name);
            holder.descView.setText(desc);

            if (onItemClickListener != null){
                holder.nameView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        onItemClickListener.onItemClick(view, i);
                    }
                });
            }
        }
    }

  //返回item个数
    @Override
    public int getItemCount() {
        return list.size();
    }

// 多类型item情况下 需要重写该方法 ,根据位置设置不同的布局 
    @Override
    public int getItemViewType(int position) {
        if (position % 3 == 0){
            return Type_First_item;
        }else {
            return Type_Second_item;
        }
    }
}

三、增加刷新

首先将SwipeRefreshLayout设置为RecyclerView的父view

 <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swiperefreshlayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/list_view"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    </android.support.v4.widget.SwipeRefreshLayout>>

代码部分

准守SwipeRefreshLayout.OnRefreshListener协议
  swiperefreshlayout.setOnRefreshListener(this);
//设置组件颜色
  swiperefreshlayout.setColorSchemeResources(R.color.colorPrimary);
//设置组件出现的位置 
 swiperefreshlayout.setProgressViewOffset(true, 0, 50);
//刷新时调用的方法
public void onRefresh() {
 }

四、添加分割线
1、xml中直接画
2、用系统的DividerItemDecoration

  Drawable drawable = ContextCompat.getDrawable(this, R.drawable.line);
  DividerItemDecoration line = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
  line.setDrawable(drawable);
  listView.addItemDecoration(line);

3、继承RecyclerView.ItemDecoration, 重写

  //画线 
   public void onDraw(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) ;
  //item的间隔
   public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) ;

相关文章

网友评论

      本文标题:recycleview 总结

      本文链接:https://www.haomeiwen.com/subject/dfieoqtx.html