recylerView的基本使用(多条目点击,多条目加载,添加,删除,上拉加载更多,下拉刷新)

包:

compile 'com.android.support:recyclerview-v7:26+'

activity_main.xml布局清单:

<Button
        android:onClick="btnAddItem"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="往RecyclerView中添加一个条目"/>
    <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/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        </android.support.v7.widget.RecyclerView>
    </android.support.v4.widget.SwipeRefreshLayout>

item.xml

 <TextView
        android:id="@+id/tvContent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textSize="20sp"
        android:padding="10dp"
        android:background="@color/colorAccent"
        android:text="哈哈哈"/>


item2.xml

 <TextView
        android:id="@+id/tvContent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textSize="20sp"
        android:padding="10dp"
        android:drawableLeft="@mipmap/ic_launcher"
        android:background="@android:color/holo_blue_dark"
        android:text="哈哈哈"/>


MyAdapter.java

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private Context context;
    private List<String> list;
    //条目点击监听
    private OnItemClickListener onItemClickListener;
    //长按事件
    private onItemLongClickListener onItemLongClickListener;
    //常量
    private static final int TYPE_ONE = 0;
    private static final int TYPE_TWO = 1;

    public MyAdapter(Context context, List<String> list) {
        this.context = context;
        this.list = list;
    }

    //添加一个条目
    public void addItem(String str) {
        list.add(0, str);
        //刷新适配器
        notifyDataSetChanged();
        //notifyItemInserted();添加的时候,想要的动画,必须调用这个方法
    }

    //删除一个条目
    public void removeItem(int postion) {
        list.remove(postion);
        //notifyDataSetChanged();
        notifyItemRemoved(postion);
    }

    //加载更多
    public void addMore(List<String> resultList) {
        for (String str : resultList) {
            list.add(str);
        }
        //刷新适配器
        notifyDataSetChanged();
    }

    //条目点击事件
    interface OnItemClickListener {
        void onItemClick(View view, int position);
    }

    //条目点击事件
    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }

    //长按事件
    interface onItemLongClickListener {
        void onItemLongClick(View view, int position);
    }


    //recycleVIew长按事件
    public void setOnItemLongClickListener(onItemLongClickListener onItemLongClickListener) {
        this.onItemLongClickListener = onItemLongClickListener;
    }


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        ViewHolder viewHolder = null;
        if (viewType == TYPE_ONE) {
            View view = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
            viewHolder = new ViewHolder(view);
        } else {
            View view = LayoutInflater.from(context).inflate(R.layout.item2, parent, false);
            viewHolder = new ViewHolder(view);
        }
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {
        //将数据绑定到控件上
        holder.tvContent.setText(list.get(position));
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //条目的点击事件
                int index = holder.getLayoutPosition();
                onItemClickListener.onItemClick(view, index);
            }
        });

        //实现recycleView的条目长按事件
        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                //条目的位置获取,应该由这个比较保险
                int index = holder.getLayoutPosition();
                onItemLongClickListener.onItemLongClick(view, index);
                return true;//让其消费掉事件
            }
        });
    }

    //得到多条目加载的类型
    @Override
    public int getItemViewType(int position) {
        if (position % 2 == 0) {
            return TYPE_ONE;
        } else {
            return TYPE_TWO;
        }
    }
    @Override
    public int getItemCount() {
        return list != null ? list.size() : 0;
    }
    class ViewHolder extends RecyclerView.ViewHolder {
        private TextView tvContent;
        public ViewHolder(View itemView) {
            super(itemView);
            tvContent = itemView.findViewById(R.id.tvContent);
        }
    }
}


MainActivity.java

全局变量:

 private RecyclerView recyclerView;
    //假数据
    private List<String> list = new ArrayList<>();
    private MyAdapter adapter;
    private LinearLayoutManager linearLayoutManager;
    private int lastItemPostion;
    private SwipeRefreshLayout swipeRefreshLayout;
正文:

  for (int i = 0; i < 20; ++i) {
            list.add("我是 " + i);
        }
        //找到swipeRefreshLayout控件
        swipeRefreshLayout = findViewById(R.id.swipeRefreshLayout);
        recyclerView = findViewById(R.id.recyclerView);
        //设置布局管理器
        linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
        recyclerView.setLayoutManager(linearLayoutManager);
        //添加分割线
        recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
        adapter = new MyAdapter(this, list);
        recyclerView.setAdapter(adapter);
        //设置添加、删除动画
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        //条目点击 、 长按
        //Google
        adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                //Toast.makeText(MainActivity.this, list.get(position), Toast.LENGTH_SHORT).show();
                adapter.removeItem(position);
            }
        });
        //recyclerView的条目长按事件
        adapter.setOnItemLongClickListener(new MyAdapter.onItemLongClickListener() {
            @Override
            public void onItemLongClick(View view, int position) {
                Toast.makeText(MainActivity.this, "我是长按事件" + list.get(position), Toast.LENGTH_SHORT).show();
            }
        });
        //实现RcyclerView的上拉刷新
        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                switch (newState) {
                    case AbsListView.OnScrollListener.SCROLL_STATE_IDLE://静止状态
                        //加载更多
                        if (adapter.getItemCount() - 1 == lastItemPostion) {
                            //滑动到了最底部
                            List<String> result = new ArrayList<>();
                            for (int i = 0; i < 10; i++) {
                                result.add("我是新来的" + i);
                            }
                            //添加更多
                            adapter.addMore(result);
                            Toast.makeText(MainActivity.this, "加载更多", Toast.LENGTH_SHORT).show();
                        }
                        break;
                }
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                //找到第一个条目
                //int firstItemPostision = linearLayoutManager.findFirstVisibleItemPosition();
                lastItemPostion = linearLayoutManager.findLastVisibleItemPosition();
                //System.out.println("firstItemPostion : "+firstItemPostision+"\t  lastItemPosition : "+lastItemPostion);
            }
        });

        //设置下拉刷新圆圈颜色变换
        swipeRefreshLayout.setColorSchemeColors(Color.BLUE, Color.YELLOW, Color.RED);
        //实现recycerView的下拉刷新
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(MainActivity.this, "下拉了", Toast.LENGTH_SHORT).show();
                        //隐藏
                        swipeRefreshLayout.setRefreshing(false);
                        //模拟网路加载数据
                    }
                }, 5000);

            }
        });


 public void btnAddItem(View view) {

        adapter.addItem("世界,你好!");

    }











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值