recycleview

MyAdapter 的点击事件和长按事件

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    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 MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        MyViewHolder viewHolder = null;
        if(viewType == TYPE_ONE) {
            View view = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
            viewHolder = new MyViewHolder(view);
        }else{
            View view = LayoutInflater.from(context).inflate(R.layout.item2, parent, false);
            viewHolder = new MyViewHolder(view);
        }


        return viewHolder;
    }

    @Override
    public void onBindViewHolder(final MyViewHolder 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 MyViewHolder extends RecyclerView.ViewHolder{

        private TextView tvContent;
        public MyViewHolder(View itemView) {
            super(itemView);
            tvContent = itemView.findViewById(R.id.tvContent);
        }
    }

}
_______________________________
public class MainActivity extends AppCompatActivity {

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

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        for (int i = 0;i < 20;++i){
            list.add("我是 "+i);
        }

        //找到swipeRefreshLayout控件
        swipeRefreshLayout = (SwipeRefreshLayout)findViewById(R.id.swipeRefreshLayout);

        recyclerView = (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("世界,你好!");

    }

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值